改变这个使用auto_ptr?

时间:2012-06-16 02:29:54

标签: memory auto-ptr

我一直在阅读c ++ auto_ptr和unique_ptr以及其他东西,并考虑在我正在玩的课程中尝试使用它们......但是我无法让它工作......

如何将这些指针转换为自动指针或等效指针,以便自动处理指针的删除?

标题 - http://ideone.com/Z9bc5 身体 - http://ideone.com/WfwBY

目前正在使用普通指针,但我有时会遇到访问冲突错误。我很确定我知道它导致了什么......但“最好的”方式可能是使用最近添加到c ++ 11的自动删除内容?

提前致谢。

1 个答案:

答案 0 :(得分:1)

请勿使用auto_ptr。尝试使用unique_ptrshared_ptr之一。 Here's Sutter解释何时使用哪个:

  

如果有疑问,默认情况下更喜欢unique_ptr,如果需要,您可以随时移动转换为shared_ptr。如果您从一开始就知道您需要共享所有权,请通过make_shared直接转到shared_ptr(参见下面的#2)。

同样来自他的博客文章:

  

第3。与auto_ptr有什么关系?

     

auto_ptr最为慈善的特征是勇敢的尝试   在C ++移动语义之前创建unique_ptr。

     

auto_ptr现已弃用,不应在新代码中使用。什么时候   你有机会,尝试全局搜索和替换auto_ptr   您的代码库中的unique_ptr;绝大多数用途都会起作用   相同,它可能会暴露(作为编译时错误)或修复(静默)   你不知道的一两个错误。

因此,您的成员声明更改为:

 sf::Texture * tSpriteSheet;

为:

 std::unique_ptr<sf::Texture> tSpriteSheet;

对于返回原始指针的成员函数,您有明显的选择:如果类不可移动,则无法返回unique_ptr。所以,您可以:

  • 保持签名原样
  • 返回const& unique_ptr<T>
  • 返回对象的引用

选择最适合您需求的那种。