2013-03-15 96 views
5

在C++ 11中我们应该总是使用unique_ptr还是shared_ptr而不是new/delete?性能如何,智能指针是否慢得多?C++ 11智能指针总是代替新的/删除?

+14

'unique_ptr'被设计为零成本抽象。学会停止担心和爱炸弹。 – 2013-03-15 12:45:36

+9

我们如何使用智能指针**而不是**'new'和'delete'。我们必须用**'new'来使用它们**,以避免'delete' – iammilind 2013-03-15 12:46:48

+4

@iammilind'make_shared'并且我还使用'make_unique'的实现。当然,它仍然在内部使用'new'。 – Cubic 2013-03-15 12:50:22

回答

7

unique_ptr与使用原始指针相比,没有(不应该)有任何运行时开销。 shared_ptr确实有一些内存和时间开销(多少取决于实现)。如果实际需要的行为类似于shared_ptr(即,没有其他实现可能会更快或更高内存效率),则此处的开销可能很容易为零。

这并不是说你永远不会在你的代码中使用新的/删除,但它不是你一直在做的事情。

2

我宁愿的shared_ptr来处理原始内存因为 -

1)它遵循RAIICounted body成语。

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

3)不再需要决定何时进行新建/删除操作。

+0

点2是不正确的。如果一个shared_ptr指向一个包含shared_ptr的对象,该对象以某种方式返回第一个。你将有一个内存泄漏。编辑:所以你仍然需要知道你有或没有智能指针。 – Tim 2013-03-15 14:17:07

+0

点2为真,循环引用是一个“有效”状态。 ''shared_ptr'只给你'如果'ref_count == 0'它的调用'delete'。 – Yankes 2013-03-15 19:02:21