Конструктор — Есть ли способ эффективно скопировать упакованные объекты JNI в C ++?

Я использую JNI Invocation API в попытке обернуть библиотеку Java в C ++.

Мои классы C ++ по сути являются контейнерами для JNI-проектов с методами set / getter для вызова JNI и извлечения данных из указанных рабочих объектов. То, что я пытаюсь выяснить, это то, как именно я должен пытаться копировать мои экземпляры класса. Например, я хочу сделать это:

absolute_date CURRENT_DATE = DATE;

Мое решение этого на данный момент состоит в том, чтобы иметь конструктор копирования, который работает так:

  1. Выполните вызовы JNI для получения данных о членах DATE,
  2. Выполните вызовы JNI, чтобы создать новый объект задания с полученными данными.
  3. Установите задание в CURRENT_DATE равный недавно созданному заданию

Этот метод, конечно, несколько утомительный, как программно, так и с точки зрения эффективности.

Копирование объекта было бы идеальным, однако это означает, что если DATE выходит из области видимости, тогда будет вызван конструктор absolute_date и, в свою очередь, вызовет DeleteLocalRef (что делает задание недействительным для вновь созданного объекта).

Есть ли способ сделать то, что я хочу? То есть Можно ли создавать уникальные клоны Java-объектов в JVM через JNI, чтобы я мог иметь 2 или более уникальных ссылок на рабочие места, каждая из которых ссылается на уникальные Java-объекты, которые имеют одинаковое состояние (то есть одинаковые значения членов и т. д.)? Я должен упомянуть, что я не могу коснуться исходного кода Java. Все это должно быть сделано через вызовы API вызова.

Если нет, то есть ли способ сделать это, используя несколько ссылок на рабочие места, то есть, если у меня есть десять копий DATE, каждая из которых имеет один и тот же проект, можно ли каким-то образом заставить деструктор ТОЛЬКО вызвать, когда последний оставшийся DATE Объект уничтожается? Умные указатели возможно? Если так, как бы я поступил так, как я относительно новичок в этом.

Спасибо,

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]