duo*_*gja 3 c++ shared-ptr make-shared c++11
正如在C++中对make_shared中的差异和普通的shared_ptr的回答所指出的那样,在大多数情况下都make_shared表现优异shared_ptr.
那么为什么C++标准既定义了两者shared_ptr又make_shared一起定义了?是否有任何我更喜欢的情况shared_ptr,make_shared甚至我只能使用shared_ptr但不能使用的情况make_shared?
其中一种情况是std :: make_shared不支持指定自定义删除器.
与
std::shared_ptr构造函数不同,std::make_shared不允许自定义删除器.
你只能用std :: shared_ptr的构造函数来做,例如
std::shared_ptr<Foo> sh5(new Foo, [](auto p) {
std::cout << "Call delete from lambda...\n";
delete p;
});
Run Code Online (Sandbox Code Playgroud)
另一个问题就像链接的帖子所解释的那样,std::make_shared只对控制块和指向的对象执行一次分配.这意味着在对象被销毁之后,它占用的内存可能不会立即被释放.这可能会导致一些内存使用问题.
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |