据我所知,在当前的C++11规范中,应该使用:
一个所有者的
std::unique_ptr<> (只有在无循环structurestd::weak_ptr<>中有多个所有者时,只有在需要中断std::weak_ptr<>)--当引用不足以满足时,作为内存句柄的原始指针(没有所有权)
所以我的问题是:
scoped_ptr<>和auto_ptr<>实际上已经过时了吗?发布于 2011-12-01 00:28:53
scoped_ptr<>和auto_ptr<>实际上已经过时了吗?
auto_ptr在C++11中不受欢迎,所以这是您的答案。scoped_ptr不存在于C++11中,也从未存在过。使用boost::scoped_ptr的主要原因是确保所有权永远不会转移(当然,除非您作弊)。同样,如果使用unique_ptr,只有在使用std::move或类似结构时才能传递所有权。或者,正如霍华德指出的,只要把它变成一个const std::unique_ptr就行了。
所以你是否需要额外的保险真的取决于你。而且,boost::scoped_ptr不支持删除器。所以unique_ptr可以玩boost::scoped_ptr不能玩的把戏。
只有当周期需要被打破时,
std::weak_ptr<>才会谨慎。
我不能说我一定同意这个政策。当对象可能想要与其他事物对话时,应该使用weak_ptr,但它不拥有其他东西。这意味着它可以在任何时候被删除,而weak_ptr的持有者需要能够在它试图与它交谈时处理该删除。
中断循环是weak_ptr的一种使用;它不应该是唯一一次使用它。
https://stackoverflow.com/questions/8334886
复制相似问题