为什么auto_ptr专门用于void?

时间:2013-09-07 15:29:52

标签: c++ c++11 smart-pointers void template-specialization

我决定从原始指针转移到智能指针,所以我可以从阅读http://en.cppreference.com/w/cpp/memory/auto_ptr开始。

在那里,我看到他们专注于void

这是为什么?它在任何情况下都有用吗?

2 个答案:

答案 0 :(得分:6)

这是在LWG 541中完成的。这个问题有完整的理由。但总之,它是为了兼容当时的std::tr1::shared_ptr(后来标准化为std::shared_ptr)。

如果您正在研究从原始指针转向智能指针,我强烈建议您使用unique_ptr支持auto_ptrauto_ptr已被弃用,并且有充分的理由。 unique_ptrauto_ptr的推荐替代品。

Here is a link解释弃用auto_ptr的理由,并将其替换为unique_ptr

答案 1 :(得分:2)

自C ++ 11以来,

std::auto_ptr已被弃用。考虑研究其他智能指针,例如std::shared_ptrunique_ptr

您的问题的答案是(据我所知):std::auto_ptr使用delete释放其内部原始指针的内存,但删除void*完全没有任何意义,因为void是一个不完整的类型,永远不能是一个对象的类型。在删除之前,必须将void *转换为相应类型的指向数据。因此,这个智能指针为void提供了一个具有较少功能的特化(请注意the reference says,即void专门化没有成员函数。)