【发布时间】:2022-11-22 10:40:10
【问题描述】:
假设我有一个 Foo 类的 unique_ptr 和一个 Foo 的向量:
class Foo { ... };
std::unique_ptr<Foo> fooPtr = std::make_unique<Foo>();
std::vector<Foo> fooVector;
现在,如果我要这样做:
fooVector.push_back(*fooPtr);
如果我没记错的话,这应该在向量中创建 Foo 实例的副本; “真实的”/原始的 Foo 仍然在内存中的某个地方被 fooPtr 指向。
我想做的是移动fooPtr 指向的内容,无需将任何内容复制到向量中(我不再需要指针),此编译:
fooVector.push_back(std::move(*fooPtr));
但我不确定它是否完全符合我的要求,或者它是否“安全”,因为在这个操作之后我仍然有 fooPtr。
我想拥有一个 unique_ptr 的向量然后移动 unique_ptr ownsership 会更容易,但我需要它像这样。
【问题讨论】:
-
移动并不神奇。搬家是浅的复制(如果需要加上取消原件)。如果您的
Foo很深(拥有指向内部对象的指针),那么移动(== 浅层复制)它比普通(== 深)复制便宜。如果不是,那就不是。
标签: c++ c++11 move unique-ptr