Я не знаком с аспектом Python в этом вопросе, но, концентрируясь на части C ++, вы не печатаете правильную информацию.
std::unique_ptr
имеет адрес, отличный от создаваемого экземпляра Example
, поэтому значения будут другими. Если вы хотите напечатать адрес элемента, к которому обращается unique_ptr
, вам нужно вызвать функцию get()
.
Вот полный пример, показывающий различия:
#include <memory>
#include <iostream>
class Example {
public:
Example() {std::cout << "constuctor " << this << std::endl;}
~Example() {std::cout << "destructor " << this << std::endl;}
};
class ABC {
public:
static std::unique_ptr<Example> get_example()
{
std::unique_ptr<Example> ptr = std::make_unique<Example>();
return ptr;
}
};
int main()
{
std::unique_ptr<Example> p = ABC::get_example();
std::cout << "The unique_ptr address is: " << &p << std::endl;
std::cout << "The get() function returns: " << p.get() << std::endl;
}
Выход:
constuctor 0x555a68bd7c20
The unique_ptr address is: 0x7ffd9fa6c120
The get() function returns: 0x555a68bd7c20
destructor 0x555a68bd7c20
Таким образом, вам нужно настроить свой код Python для вывода возвращаемого значения get()
.