当类继承类' enable_shared_from_this '时,为什么' std::make_shared '不再工



当类Widget继承类enable_shared_from_this时,为什么std::make_shared不再工作?

下面是代码片段:
#include<memory>
#include<vector>
#include<iostream>
class Widget:public std::enable_shared_from_this<Widget>
{
public:
std::vector<int> vec;
int var;
};
int main()
{
auto wp{std::make_shared<Widget>()}; 
//auto wp1{std::make_shared<Widget>(std::vector{1,2,3}, 9)}; //why his line compiles if class Widget does not inherit class enable_shared_from_this<Widget> 
}

如果去掉继承,auto wp1{std::make_shared<Widget>(std::vector{1,2,3}, 9)};

可以很好地工作。:上述两个代码片段都不能用clang编译。

TED的答案:

这是因为enable_shared_from_this添加了一个构造函数,它消除了聚合初始化的可能性。为了支持从make_shared创建它,添加必要的构造函数:

public:
Widget() = default;
Widget(const std::vector<int>& v, int i) : vec(v), var(i) {}

确实有效。但我仍然不知道为什么有一个构造函数由enable_shared_from_this添加?

相关内容

  • 没有找到相关文章

最新更新