我一直在阅读c ++ auto_ptr和unique_ptr以及其他东西,并考虑在我正在玩的课程中尝试使用它们......但是我无法让它工作......
如何将这些指针转换为自动指针或等效指针,以便自动处理指针的删除?
标题 - http://ideone.com/Z9bc5 身体 - http://ideone.com/WfwBY
目前正在使用普通指针,但我有时会遇到访问冲突错误。我很确定我知道它导致了什么......但“最好的”方式可能是使用最近添加到c ++ 11的自动删除内容?
提前致谢。
答案 0 :(得分:1)
请勿使用auto_ptr
。尝试使用unique_ptr
或shared_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>
选择最适合您需求的那种。