原始指针和shared_ptr之间的C++接口

use*_*536 4 c++ shared-ptr

我有整个使用原始指针的代码.

它需要调用一个将原始指针转换为shared_ptr的方法.这种方法不在我的控制之下,属于外部api.我不能只是将指针传递给shared_ptr,因为当shared_ptr超出方法范围时(当方法返回时)它将被删除.

除了在我的内部代码中将原始指针设为shared_ptr之外,我还有其他选择吗?

Jam*_*lis 10

这听起来有点不寻常,可能非常危险,但是你可以在构造时使用no-op删除器来完成这个shared_ptr:

struct no_op_delete
{
    void operator()(void*) { }
};

int* p = 0; // your pointer
std::shared_ptr<int> sp(p, no_op_delete());
Run Code Online (Sandbox Code Playgroud)

当它sp和由它构成的所有副本都被销毁时,no_op_delete将调用它来清理保持的指针.由于它什么都不做,你得到了你需要的行为.