从C++中传递一个共享指针/在堆上放置一个共享指示器

Pass a shared pointer out of C++ / Put a shared pointer on the heap

本文关键字:共享 一个 指示器 C++ 指针      更新时间:2023-10-16

我正试图通过void*将一个共享指针传递到Obj-C中,这样它就可以保留一个特定的对象,然后删除它(通过C++函数)。

这行得通吗?

我可以想出一个更好的主意,但这似乎是获得共享指针引用的最快方法。只是想确保我的数学不会偏离malloc(因为我不经常使用它)。

std::shared_ptr<AAA> shared_ptr = getSharedPointer();
std::shared_ptr<AAA>* ptr = malloc(sizeof(std::shared_ptr<AAA>));
*ptr = shared_ptr;
return ptr;

通过搜索malloc和c++找到(使用malloc而不是new,并在创建对象时调用复制构造函数)

赋值与OP中的代码一样正常工作,但随后需要手动调用析构函数和free(),而不是delete。

我用简单的单元测试测试了这一点,指针引用计数正确地递增和递减。