gpt4 book ai didi

c++ - 通过构造函数初始化 unique_ptr

转载 作者:太空狗 更新时间:2023-10-29 19:46:11 24 4
gpt4 key购买 nike

class BaseShader {
std::unique_ptr<HandleInterface> handle_;
public:
BaseShader();
BaseShader(std::unique_ptr<HandleInterface> handle_ptr);

.cpp

BaseShader::BaseShader(std::unique_ptr<HandleInterface> handle_ptr) {
handle_.reset(handle_ptr.get());
}
//BaseHandle implements HandleInterface
BaseShader::BaseShader():BaseShader(std::make_shared<BaseHandle>()) {
}

我将如何初始化我的 unique_ptr handle_正确吗?

我想这样用BaseShader s(std::make_shared<BaseHandle>());

叮当告诉我

error: no matching constructor for initialization of 'BaseShader'
BaseShader::BaseShader():BaseShader(std::make_shared<BaseHandle>()) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我可能搞砸了。

1.) 我的构造函数参数是否正确? BaseShader::BaseShader(std::unique_ptr<HandleInterface> handle_ptr)

2.) 如果 1.) 为真则为 handle_.reset(handle_ptr.get());初始化 handle_unique_ptr 的正确方法?

最佳答案

首先,您应该简单地从构造函数的参数std::move到成员初始化列表中的handle_:

BaseShader::BaseShader(std::unique_ptr<HandleInterface> handle_ptr)
: handle_(std::move(handle_ptr))
{ }

其次,std::make_shared 会在您需要 unique_ptr 时为您提供 shared_ptr。不幸的是,没有 std::make_unique ( yet ),所以你必须这样做:

BaseShader::BaseShader()
: BaseShader(std::unique_ptr<BaseHandle>(new BaseHandle()))
{ }

这仅在 BaseHandle 派生自 HandleInterface 时有效。

关于c++ - 通过构造函数初始化 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492044/

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