gpt4 book ai didi

c++ - 将对象移到unique_ptr

转载 作者:行者123 更新时间:2023-12-02 09:51:30 24 4
gpt4 key购买 nike

我有类似于this的代码:

#include <iostream>
#include <memory>
#include <optional>

class D {
D(int i) : i(i), private_member('p') {}
char private_member;
public:
D(const D&) = delete;
D &operator=(const D&) = delete;

D(D &&) = default;
D &operator=(D &&) = default;

static std::optional<D> try_create(int i) {
return i > 10 ? std::make_optional<D>(i) : std::nullopt;
}
int i;
};

void accept_unique_ptr_only(std::unique_ptr<D> &ptr) {}

int main() {
const auto d1 = D::try_create(10);
const auto d2 = D::try_create(11);

std::cout << (d1.has_value() ? std::to_string(d1->i) : "none1") << std::endl;
std::cout << (d2.has_value() ? std::to_string(d2->i) : "none2") << std::endl;
}
class D来自外部库,因此遗憾的是没有机会对其进行更改。
在此有效的同时,我需要获取 std::unique_ptrD确实实现了move构造函数,所以我认为我可以将 D移到 std::unique_ptr中,但是我找不到允许我这样做的方法或构造函数。
在不访问构造函数本身的情况下将 D实例移至 std::unique_ptr的最佳方法是什么?

最佳答案

使用 std::make_unique ,这样的事情:

// non-const
auto d1 = D::try_create(10);

// accounting for empty option
auto d1ptr = d1 ? std::make_unique(std::move(*d1)) : std::unique_ptr<D>();
生成的 unique_ptr将拥有 D或不取决于 std::optional。您必须将 d1设为非常量,因为您需要对内部 D进行非常量访问才能将其移出。

关于c++ - 将对象移到unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64330902/

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