c – 我什么时候应该更喜欢`shared_ptr`到`make_shared`?
发布时间:2020-12-16 10:07:16 所属栏目:百科 来源:网络整理
导读:参见英文答案 Initializing shared_ptr member variable,new vs make_shared?????????????????????????????????????2个 正如 Difference in make_shared and normal shared_ptr in C++的答案所指出的那样,make_shared在大多数情况下都优于shared_ptr. 那么为
参见英文答案 >
Initializing shared_ptr member variable,new vs make_shared?????????????????????????????????????2个
正如 Difference in make_shared and normal shared_ptr in C++的答案所指出的那样,make_shared在大多数情况下都优于shared_ptr. 那么为什么C标准一起定义shared_ptr和make_shared?是否有任何情况我应该更喜欢shared_ptr到make_shared,甚至我只能使用shared_ptr但不能使用make_shared? 解决方法
其中一种情况是
std::make_shared不支持指定自定义删除器.
你只能使用std::shared_ptr的构造函数来完成它,例如 std::shared_ptr<Foo> sh5(new Foo,[](auto p) { std::cout << "Call delete from lambda...n"; delete p; }); 另一个问题就像链接的帖子所解释的那样,std :: make_shared只对控制块和指向的对象执行一次分配.这意味着在对象被销毁之后,它占用的内存可能不会立即被释放.这可能会导致一些内存使用问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |