删除非类型化的shared_ptr

use*_*643 -1 c++ libstdc++ c++11

我正在致力于将 C++ 库包装到 C 桥中。

\n\n

所有对象,我\xe2\x80\x99d 喜欢在堆上使用shared_ptrs 进行维护,例如:

\n\n
void* makeFoo() {\n  return new shared_ptr<void>(shared_ptr::make_shared<Foo>());\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以使用这样的通用销毁吗:

\n\n
void destroy(void* p) {\n  delete static_cast<shared_ptr<void>*> p;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者有更干净的方法吗?

\n

Lig*_*ica 5

参数的类型必须delete与您要删除的内容的实际类型匹配(例如,否则如何调用正确的析构函数?),或者至少是多态层次结构中的基类型,以便可以找到析构函数几乎 ([expr.delete]/3)。

所以,不,你不能那样做。

  • @user3612643 shared_ptr 维护的内容无关紧要,因为触发其销毁的“delete”语句从根本上被破坏了。 (2认同)