Kem*_*hou 1 c++ pointers move c++11
我在想一个奇怪的用例,我想将对象移到nullptr。也许我应该给出一个代码片段:
class Objpair {
public:
Objpair(Obj&& a, Obj&&b) : first(&a), second(&b) { }
private:
Obj* first;
Obj* second;
};
Run Code Online (Sandbox Code Playgroud)
问题在于,当a和b超出范围时,第一和第二指针将悬空。如果我可以将Object a移到第一个指针上,那么应该就不会出现双重释放和作用域问题。如果首先将成员声明为Obj而不是Obj *指针,则直接的first(std :: move(a))将完成此工作。我在这里一定做错了。我正在考虑移动而不是复制,因为我试图将控制权从另一个对象转移到当前对象并提高性能。
使用指针版本是因为我正在考虑成员对象的多态行为。
您可以做的是像这样从参数中移动构造对象:
class Objpair {
public:
Objpair(Obj&& a, Obj&& b)
: first(new Obj(std::move(a)))
, second(new Obj(std::move(b)))
{}
private:
Obj* first;
Obj* second;
};
Run Code Online (Sandbox Code Playgroud)
我建议您使用std::unique_ptr:
class Objpair {
public:
Objpair(Obj&& a, Obj&& b)
: first(std::make_unique<Obj>(std::move(a)))
, second(std::make_unique<Obj>(std::move(b)))
{}
private:
std::unique_ptr<Obj> first;
std::unique_ptr<Obj> second;
};
Run Code Online (Sandbox Code Playgroud)