1

我一直在阅读 c++ auto_ptr 和 unique_ptr 之类的东西,并想尝试在我正在玩的课程中使用它们......但我无法让它工作......

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

标题 - http://ideone.com/Z9bc5 正文 - http://ideone.com/WfwBY

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

提前致谢。

4

1 回答 1

1

不要使用auto_ptr. 尝试其中之一unique_ptrshared_ptr这是Sutter 解释何时使用 which:

如有疑问,默认情况下更喜欢 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如果类不可移动,则不能返回 a。因此,您可以:

  • 保持签名不变
  • 返回一个const& unique_ptr<T>
  • 返回对对象的引用

选择最适合您需求的那一款。

于 2012-06-16T02:35:24.413 回答