Ken*_* Li 29 c++ shared-ptr c++11
我有把std :: shared_ptr作为参数的函数,所以我被迫使用std :: shared_ptr,但我传递给函数的对象没有动态分配.如何在std :: shared_ptr中包装对象并让std :: shared_ptr不调用delete.
ron*_*nag 42
MyType t;
nasty_function(std::shared_ptr<MyType>(&t, [](MyType*){}));
Run Code Online (Sandbox Code Playgroud)
Rei*_*ica 27
创建共享指针时指定no-op删除器.像这样:
void null_deleter(MyType *) {}
int main()
{
MyType t;
nasty_function(std::shared_ptr<MyType>(&t, &null_deleter));
}
Run Code Online (Sandbox Code Playgroud)
T.C*_*.C. 19
执行此操作的最佳方法是使用别名构造函数:
nasty_function(std::shared_ptr<MyType>(std::shared_ptr<MyType>{}, &t));
Run Code Online (Sandbox Code Playgroud)
与null删除器方法相比,这不需要分配控制块,并且是noexcept.
正如@Casey和@Nevin所指出的那样,只有在您确定该函数不会尝试获取共享所有权时,或者如果该对象比可能"拥有"它的所有内容更长时,才应该这样做.
| 归档时间: |
|
| 查看次数: |
11958 次 |
| 最近记录: |