当类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
添加?