Я использую JNI Invocation API в попытке обернуть библиотеку Java в C ++.
Мои классы C ++, по сути, являются контейнерами для JNI-проектов с методами set / getter для вызова JNI и извлечения данных из указанных рабочих объектов. То, что я пытаюсь выяснить, это то, как именно я должен пытаться копировать мои экземпляры класса. Например, я хочу сделать это:
absolute_date CURRENT_DATE = DATE;
Мое решение для этого на данный момент состоит в том, чтобы иметь конструктор копирования, который работает так:
- Выполнение вызовов JNI для извлечения данных члена
DATE
.
- Выполнение вызовов JNI для создания нового объекта задания с полученными данными.
- Установите объект задания в
CURRENT_DATE
равным вновь созданному объекту задания
Этот метод, конечно, несколько утомителен как программно, так и с точки зрения эффективности.
Копирование объекта задания было бы идеальным, однако это означает, что если DATE
выйдет из области видимости, будет вызван конструктор absolute_date, который, в свою очередь, вызовет DeleteLocalRef
(что делает недействительным объект задания для вновь созданного объекта).
Есть ли способ сделать то, что я хочу? То есть Можно ли создавать уникальные клоны Java-объектов в JVM через JNI, чтобы я мог иметь 2 или более уникальных ссылок на рабочие места, каждая из которых ссылается на уникальные Java-объекты, которые имеют одинаковое состояние (т.е. одинаковые значения членов и т. д.)? Я должен упомянуть, что я не могу коснуться исходного кода Java. Все это должно быть сделано через вызовы API вызова.
Если нет, то есть ли способ сделать это, используя несколько ссылок на рабочие места, т.е. если у меня есть десять копий DATE, каждая из которых имеет один и тот же проект, возможно ли каким-то образом заставить деструктор ТОЛЬКО вызвать, когда последний оставшийся DATE
Объект уничтожается? Умные указатели возможно? Если так, как бы я поступил так, как я относительно новичок в этом.
Спасибо,