不要使用auto_ptr
. 尝试其中之一unique_ptr
或shared_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>
- 返回对对象的引用
选择最适合您需求的那一款。