为什么std :: shared_ptr与std :: unique_ptr w.r.t不同数组删除?

时间:2014-11-26 05:33:57

标签: c++ c++11 smart-pointers

我从未理解为什么std::shared_ptrstd::unique_ptr与数组一起使用时会有所不同,即为什么我必须明确指定std::shared_ptr的删除器?我知道我必须这样做,我不明白为什么它是这样设计的。

例如,对于class Foo{...};类型的数组,使用std::unique_ptr非常简单:

std::unique_ptr<Foo[]> upFoo(new Foo[128]);

而对于std::shared_ptr事情则更加丑陋

// must specify deleter :(
std::shared_ptr<Foo> spFoo( new Foo[128], []( Foo *p ) { delete[] p; } ); 

不仅如此,编译器允许我编写类似

的内容
// don't do it :(
std::shared_ptr<Foo> spFoo( new Foo[128]);

但删除时会调用delete spFoo;而不是正确的delete[] spFoo;

0 个答案:

没有答案