作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在想一个奇怪的用例,我想将一个对象 move 到 nullptr。也许我应该给出一个代码片段:
class Objpair {
public:
Objpair(Obj&& a, Obj&&b) : first(&a), second(&b) { }
private:
Obj* first;
Obj* second;
};
问题是当 a 和 b 超出范围时,第一个和第二个指针将悬空。如果我可以将对象 a move 到第一个指针上,那么应该没有双重释放和范围问题。如果成员 first 被声明为 Obj 而不是 Obj* 指针,那么直接 first(std::move(a)) 就可以完成这项工作。我一定是在这里做错了什么。我正在考虑 move 而不是复制,因为我正在尝试将控制权从另一个对象转移到当前对象并提高性能。
使用指针版本是因为我正在考虑成员对象的多态行为。
最佳答案
你可以做的是从你的参数中 move 构造对象,如下所示:
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;
};
我推荐你使用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;
};
关于C++ 如何将对象 move 到 nullptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55484089/
我是一名优秀的程序员,十分优秀!