Why std::make_shared
does not work anymore when the class Widget
inherits class enable_shared_from_this
?
Here is the code snippet:
#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>
}
What's more, auto wp1{std::make_shared<Widget>(std::vector{1,2,3}, 9)};
works well if you remove the inheritance.
TED's answer:
It's because there is a constructor added by enable_shared_from_this which removes the possibility to do aggregate initialization. In order to support creating it from make_shared, add the necessary constructors:
public: Widget() = default; Widget(const std::vector<int>& v, int i) : vec(v), var(i) {}
It works indeed.But I still don't know why there is a constructor added by enable_shared_from_this?
Aucun commentaire:
Enregistrer un commentaire