остановить объект python, выходящий за пределы области видимости в С++

Есть ли способ передать новый экземпляр класса (класс python, который наследует класс С++) в С++ без необходимости удерживать возврат объекта и просто рассматривать его как указатель С++.

Например:

C++

object pyInstance = GetLocalDict()["makeNewGamePlay"]();
CGEPYGameMode* m_pGameMode = extract< CGEPYGameMode* >( pyInstance );

пиф:

class Alpha(CGEPYGameMode):
  def someFunct(self):
    pass

def makeNewGamePlay():
  return Alpha()

pyInstance — это экземпляр класса Python, а m_pGameMode — указатель на базовый класс C++ того же экземпляра. Однако, если я сохраню указатель и позволю объекту выйти из области видимости, объект python будет очищен. Есть ли способ получить только указатель С++ без очистки объекта?

Дополнительная информация: объект python на собственный указатель c++


person Lodle    schedule 01.09.2009    source источник


Ответы (1)


Вы должны увеличить счетчик ссылок pyInstance. Это предотвратит его удаление Python. Когда вы будете готовы удалить его, вы можете просто уменьшить счетчик ссылок, и Python очистит его за вас.

person Aaron Digulla    schedule 01.09.2009