【问题标题】:Pass a shared pointer out of C++ / Put a shared pointer on the heap从 C++ 中传递一个共享指针/将一个共享指针放在堆上
【发布时间】:2016-01-07 01:52:35
【问题描述】:

我正在尝试通过 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 与共享 ptr?永远不要那样做。
  • Obj-C 将如何删除该指针?用吗?
  • 我不明白你要做什么,但它似乎不对。
  • 可能是 Obj-C 提供了可以使这更容易的功能,但一般的解决方案是给其他语言一个对象指针加上 getref、addref 和 removeref 函数。你不要给它一个指向 C++ shared_ptr 实现细节的指针
  • 从未使用过Obj-C,但我想你可以传递给它的唯一东西是通过shared_ptr.get() 获得的原始指针

标签: c++ pointers


【解决方案1】:

通过搜索 malloc 和 c++ (Using malloc instead of new, and calling the copy constructor when the object is created) 找到

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

我已经用简单的单元测试进行了测试,这可以正常工作,并且指针引用计数正确地递增和递减。

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多