C++ C++;11智能指针是否总是代替新建/删除?
在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
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
@iammilindmake_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
时提供该选项。