Почему выход ID () применяется к объекту Python, возвращаемому из C ++ через Pybind11 Нестабильный?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему выход ID () применяется к объекту Python, возвращаемому из C ++ через Pybind11 Нестабильный?

Сообщение Anonymous »

Я использую класс держателя для хранения std :: shared_ptr для другого класса C ++, созданного в Python Таким образом: < /p>

Код: Выделить всё

#include 
#include 

#include

class Child {

};

class Holder {
public:
Holder(std::shared_ptr child) : m_child {child} {
print_child_address();
}

std::shared_ptr get_child() {
return m_child;
}

void print_child_address() {
std::cout 
Это работает с Python: < /p>
>>> from pointers import *
>>> c = Child()
>>> h = Holder(c)
0x607d93adc800
>>> hex(id(c))
'0x7c9f96460a70'
>>> hex(id(h.get_child()))
'0x7c9f96460a70'
< /code>
Однако, когда я называю это так, я получаю очень странный результат: < /p>
>>> h = Holder(Child())
0x6304fb8a8800
>>> hex(id(h.get_child()))
'0x7dd87bcc4eb0'
>>> hex(id(h.get_child()))
'0x7dd87bcc4c70'
>>> a = h.get_child()
>>> hex(id(h.get_child()))
'0x7dd87bcc4eb0'
>>> hex(id(h.get_child()))
'0x7dd87bcc4eb0'
Идентификатор (адрес) h.get_child () изменяется каждый раз, пока я не назначаю h.get_child () переменной, в этот момент она станет стабильной. В ipython поведение еще более незнакомое, поскольку адрес становится стабильным после вызова h.get_child () , без назначения. Holder класс стабилен, и все, кажется, работает на стороне C ++, но мне не нравится эта очевидная нестабильность объекта Python. Кто -нибудь может объяснить, что здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/796 ... -via-pybin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»