我有整个使用原始指针的代码.
它需要调用一个将原始指针转换为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将调用它来清理保持的指针.由于它什么都不做,你得到了你需要的行为.
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |