2

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

在那里,我看到它们专门用于void.

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

4

2 回答 2

6

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

如果您正在调查从原始指针到智能指针的迁移,我强烈建议您unique_ptr使用auto_ptr. auto_ptr已弃用,并且有充分的理由。 unique_ptr是推荐的替代品auto_ptr

这是一个链接,解释了弃用的基本原理auto_ptr,并将其替换为unique_ptr.

于 2013-09-07T15:54:48.730 回答
2

std::auto_ptr自 C++11 起已弃用。考虑研究其他智能指针,例如std::shared_ptrand unique_ptr

你的问题的答案是(据我所知):std::auto_ptr用于delete释放其内部原始指针的内存,但删除void*根本没有意义,因为 void 是不完整的类型,永远不可能是对象的类型。在删除之前,您必须将 void* 转换为指向数据的相应类型。因此,此智能指针提供了一种void功能较少的特化(请注意,参考文献中说void 特化没有成员函数)。

于 2013-09-07T15:47:35.940 回答