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