Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11智能指针是否总是代替新建/删除?_C++_Performance_C++11_New Operator_Smart Pointers - Fatal编程技术网

C++ C++;11智能指针是否总是代替新建/删除?

C++ C++;11智能指针是否总是代替新建/删除?,c++,performance,c++11,new-operator,smart-pointers,C++,Performance,C++11,New Operator,Smart Pointers,在C++11中,我们应该始终使用unique\u ptr还是shared\u ptr而不是new/delete?性能如何,智能指针是否慢得多?unique\u ptr与使用原始指针相比,没有(不应该)任何运行时开销共享_ptr确实有一些内存和时间开销(多少取决于实现)。如果您确实需要类似于共享\u ptr的东西,那么这里的实际开销很容易为零(也就是说,您所想到的任何其他实现都不会更快或更节省内存) 这并不是说你永远不会在代码中使用new/delete,但这并不是你一直都会做的事情。我更喜欢sha

在C++11中,我们应该始终使用
unique\u ptr
还是
shared\u ptr
而不是
new
/
delete
?性能如何,智能指针是否慢得多?

unique\u ptr
与使用原始指针相比,没有(不应该)任何运行时开销<代码>共享_ptr确实有一些内存和时间开销(多少取决于实现)。如果您确实需要类似于
共享\u ptr
的东西,那么这里的实际开销很容易为零(也就是说,您所想到的任何其他实现都不会更快或更节省内存)


这并不是说你永远不会在代码中使用new/delete,但这并不是你一直都会做的事情。

我更喜欢shared\u ptr来处理原始内存,因为-

1) 它遵循了语言和习语

2) 对象保证被销毁,即使发生异常也会释放内存


3) 不再需要选择何时新建/删除。

unique\u ptr
设计为零成本抽象。学会停止担忧,热爱炸弹。我们如何使用智能指针而不是
new
delete
。我们必须将它们与
new
一起使用,以避免
delete
@iammilind
make_shared
,我还使用了
make_unique
的实现。当然,这仍然在内部使用
new
。@iammilind是的,我知道,但是如果没有new,就不能使用delete,所以我刚才写的“new and delete”第2点是不正确的。如果一个共享的\u ptr引用一个包含共享的\u ptr的对象,该共享的\u ptr以某种方式引用回第一个。您将出现内存泄漏。编辑:所以你仍然需要知道你有没有智能指针。第2点是正确的,循环引用是一个“有效”状态
shared\u ptr
仅在
ref\u count==0
其调用
delete
时提供该选项。