【发布时间】:2022-01-19 16:28:00
【问题描述】:
问题描述
我们有2 类A 和B。 B 有如下构造函数:
B(std::function<std::unique_ptr<A>()> a)
我正在尝试创建一个unique_ptr,就像std::unique_ptr<B> aPtr = std::unique_ptr<B>(new B(std::function<std::unique_ptr<A>())); 一样,我不知道该怎么做。它没有编译,我无法真正解释错误。
如何为 B 类创建 unique_ptr?
// Online C++ compiler to run C++ program online
#include <iostream>
#include <memory>
#include <functional>
class A {
public:
A(){}
};
class B
{
public:
B(std::function<std::unique_ptr<A>()> a):_a(std::move(a)) {}
private:
std::function<std::unique_ptr<A>()> _a;
};
int main() {
//std::unique_ptr<B> bPtr = std::unique_ptr<B>(new B(std::function<std::unique_ptr<A>()));
return 0;
}
【问题讨论】:
-
您的
<没有关闭>。另外,您希望_a存储什么功能?它应该是空的吗? -
你需要一个
A工厂(std::function<std::unique_ptr<A>()>)作为[](){ return std::make_unique<A>(); } -
@Jarod42 我更新了代码你能检查一下吗?你是唯一一个做出正确评论的人
-
不要使用
new。改为这样做:unique_ptr<B> bPtr = make_unique<B>([]{ return make_unique<A>(); });
标签: c++ unique-ptr