gpt4 book ai didi

C++ 如何将对象 move 到 nullptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:41 25 4
gpt4 key购买 nike

我在想一个奇怪的用例,我想将一个对象 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com