使用std::unique_ptr
创建new
有意义吗?在下面的代码段中,我怀疑由SimpleClass
管理的std::unique_ptr
对象不会被销毁,除非我自己删除std::unique_ptr
。我想不出有什么用处,所以我想知道是否有实际使用过的用处。
std::unique_ptr<vector_test::SimpleClass>* ptr_to_unique_ptr = new std::unique_ptr<vector_test::SimpleClass>();
ptr_to_unique_ptr->reset(new vector_test::SimpleClass(555));
delete ptr_to_unique_ptr;
答案 0 :(得分:2)
使用
std::unique_ptr
创建new
有意义吗?
大多数可能不是。
没有简明的理由说明为什么您已经/应该在已经使用标准dynamic memory allocation techniques的情况下退回到手动内存管理。
我想不出一个有用的情况,所以我想知道是否有实际使用它的情况。
我也无法想象这种情况。
答案 1 :(得分:1)
动态分配单个指针很少使用。最接近真实单词的用例是一个单链表,其中我们动态分配一个类实例,该实例包含一个指针以及一些与该节点关联的数据。虽然,实现链接列表的需要很少,因为它很少是数据结构的最佳选择,并且因为标准库已经提供了不错的链接列表设计。
请注意,如果我们要动态分配(智能)指针,则没有充分的理由不使用智能指针来管理该分配。
答案 2 :(得分:1)
使用new创建std :: unique_ptr是否有意义?
我想不到。在某些情况下,当包含unique_ptr
的作用域结束时,您想防止通过unique_ptr
管理的对象被删除。有多种方法可以执行此操作,而不必new
本身。
一些例子:
将对象移动到另一个作用域中的另一个unique_ptr
。
unique_ptr
从函数返回通过std::unique_ptr<int> p1;
{
std::unique_ptr<int> p2 = std::make_unique<int>( 42 );
p1 = std::move( p2 );
// Destructor of p2 won't delete object, because ownership was transferred.
}
// Scope of p2 has ended, but object is still managed by p1.
std::cout << *p1;
管理的对象。
unique_ptr
Release所有权并获取原始指针。
std::unique_ptr<int> MyFun() {
std::unique_ptr<int> p = std::make_unique<int>( 42 );
return p; // No explicit move required, because of RVO
}