我决定从原始指针转移到智能指针,所以我可以从阅读http://en.cppreference.com/w/cpp/memory/auto_ptr开始。
在那里,我看到他们专注于void
。
这是为什么?它在任何情况下都有用吗?
答案 0 :(得分:6)
这是在LWG 541中完成的。这个问题有完整的理由。但总之,它是为了兼容当时的std::tr1::shared_ptr
(后来标准化为std::shared_ptr
)。
如果您正在研究从原始指针转向智能指针,我强烈建议您使用unique_ptr
支持auto_ptr
。 auto_ptr
已被弃用,并且有充分的理由。 unique_ptr
是auto_ptr
的推荐替代品。
Here is a link解释弃用auto_ptr
的理由,并将其替换为unique_ptr
。
答案 1 :(得分:2)
std::auto_ptr
已被弃用。考虑研究其他智能指针,例如std::shared_ptr
和unique_ptr
。
您的问题的答案是(据我所知):std::auto_ptr
使用delete
释放其内部原始指针的内存,但删除void*
完全没有任何意义,因为void是一个不完整的类型,永远不能是一个对象的类型。在删除之前,必须将void *转换为相应类型的指向数据。因此,这个智能指针为void
提供了一个具有较少功能的特化(请注意the reference says,即void专门化没有成员函数。)