【发布时间】:2021-03-22 15:05:58
【问题描述】:
我有一个类实例向量。这些实例中的每一个都有一个指向另一个类的 unique_ptr。 由于我从未尝试复制类实例甚至共享指针,我觉得 unique_ptr 比 shared_ptrs 更合适,因为指针不共享,而只能通过类实例访问。
这是不好的做法吗?为什么这行不通?我知道将实例复制到唯一指针是不正确的,但是由于我移动它,我不明白为什么不允许这样做?
我必须创建一个自定义移动构造函数吗?它应该怎么做?
从向量中删除对象实例后,应该立即删除唯一的 ptr,因为没有任何引用,对吧?
更好理解的代码示例:
class A {
private:
int number;
public:
void f() {
std::cout << "The number is: " << number;
}
A(int i) : number{i} {}
~A() = default;
};
class B {
std::unique_ptr<A> good_a;
B() : good_a{ std::make_unique<A>(1) } {}
~B() = default;
};
int main()
{
std::vector<B> all;
B my_b(123);
all.emplace_back(std::move(my_b));
}
【问题讨论】:
-
您应该尝试将您的帖子集中在一个问题上。你具体要问什么?如果
B预计是指向A的唯一拥有者,那么unique_ptr将是使用的理想指针类型。 -
还要注意
all.emplace_back(std::move(my_b));和all.push_back(std::move(my_b));的效果一样。如果你真的想用emplace_back,试试all.emplace_back(123); -
请注意,
~A() = default;不是必需的。除非显式声明另一个析构函数,否则对于任何类类型都隐含这一点。 -
@alterigel 只是它不是。移动构造函数被禁止。
标签: c++ unique-ptr