从 C++17 开始,您可以使用make_unique
它来创建指向数组的智能指针,例如:
unique_ptr<int[]> ptr = make_unique<int[]>(10);
这将创建一个指向 10 个元素的数组的智能指针(正确的 deleter[] 将被调用的事实也很棒)。
但是据此不 make_shared
支持此类功能(据我了解,至少在 C++17 中不支持):
shared_ptr<int[]> ptr = make_shared<int[]>(10);
上面的代码显然是非法的。事实上,我的 Visual Studio 2017 (v141) 吐出以下错误:
C2070: 'int[]': illegal sizeof operand'
有趣的是它shared_ptr
本身确实支持数组类型(即合法),但shared_ptr<int[]>
不支持。而确实如此。make_shared
make_unique
问题是,是什么阻止了标准制定者让make_shared
支持数组类型,就像make_unique
?