从C++中传递一个共享指针/在堆上放置一个共享指示器
Pass a shared pointer out of C++ / Put a shared pointer on the heap
我正试图通过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。
我用简单的单元测试测试了这一点,指针引用计数正确地递增和递减。
相关文章:
- 模板函数如何处理可能共享一个交集的多个类型名称?
- C++:在另外两个对象之间共享一个对象
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 复制一个对象并使两者共享一个成员变量 (C++)
- 两个C++库如何共享一个静态缓冲区?
- C++在对象的多个实例之间共享一个变量
- ptrA = ptrB 是否等同于 ptrA = &*ptrB?,空值是否共享一个地址空间?
- C 模板功能,相同类型,多个实例:共享一个相同的代码副本?即使在不同的CPP/对象文件中
- 在不在同一目录中的2个c++文件之间共享一个变量
- 同一个c++类的所有实例共享一个vtable,或者每个实例都有自己的vtable
- 与多个类共享一个对象
- 在显示不同数据列的两个视图之间共享一个模型
- 可以两个类共享一个好友功能
- 在多个函数之间共享一个向量,我的程序无法按预期工作。
- c++组合向量(如果它们共享一个数字)
- 是否可以在单线程应用程序中的多个lua_State之间共享一个表
- 在Mac OS X上共享一个c++库,这样我就可以在mySQL中添加用户定义的函数
- 两个函数声明共享一个定义,这合法吗?
- 在主线程和线程之间共享一个变量
- 让两个dll共享一个静态库的缺陷是什么?