3

在了解 auto_ptr、unique_ptr 和 shared_ptr 的同时,我知道 auto_ptr 析构函数使用 delete,而不是 delete[],因为 unique_ptr 确实可以正确处理它。

auto_ptr<char> aptr(new char[100]);
unique_ptr<char []> uptr(new char[100]);

无论如何 auto_ptr 在 c++11 中已被弃用。而且我知道 unique_ptr 的功能比 auto_ptr 多得多。我有两个与此行为有关的问题

a) 为什么在 c++ 标准库团队为 auto_ptr 设计行为时没有考虑到它对数组的不利影响。

b)即使在c ++ 11中引入了shared_ptr,为什么它的实现不支持删除数组?

4

2 回答 2

4

为什么 c++ 标准库团队在为 auto_ptr 设计行为时没有考虑到它对数组的不利影响。

我无法评论为什么auto_ptr设计得不好。我只能观察到它不是,这就是它现在被弃用的原因。这真的不值得担心;只是假装它从未存在过。

即使在c ++ 11中引入了shared_ptr,为什么它的实现不支持删除数组?

它支持任意删除器,因此您可以这样做;只是比 with 稍微不方便unique_ptr

std::shared_ptr<int> p(new int[42], std::default_delete<int[]>());
于 2013-05-11T13:40:47.730 回答
1

以下是关于 auto_ptr 受折磨历史的好读物: http ://www.aristeia.com/BookErrata/auto_ptr-update.html 。事实是,在右值引用被发明之前,为标准容器设计具有异常安全性的防弹智能指针几乎没有希望。

于 2013-05-11T13:36:25.077 回答