У меня есть код, подобный следующемуПередача shared_ptr этого в конструкторе
class Task;
class Attribute
{
public:
Attribute(Task* task, std::string name);
std::shared_ptr<Task> task_;
std::string name_;
};
class Task : std::enable_shared_from_this<Task>
{
public:
std::shared_ptr<Task> getSharedPtr()
{
return this->shared_from_this();
}
Attribute att1_ = {this, "attribute1"};
Attribute att2_ = {this, "attribute2"};
};
Attribute::Attribute(Task* task, std::string name)
: name_(name)
{
task_ = task->getSharedPtr();
}
Когда я запускаю его я получаю
$ terminate called after throwing an instance of 'std::bad_weak_ptr'
из этого question меня, что я не могу назвать shared_from_this()
недо объекта полностью построена. Я предполагаю, что это означает, что я не могу создавать объекты типа Attribute
в конструкторе, но я должен создать их после завершения конструктора.
Знаете ли вы, что это способ преодолеть эту проблему, потому что мне было бы очень неприятно создавать объекты атрибута не в конструкторе.
Объект 'Task' управляется' std :: shared_ptr'? – LogicStuff
Почему вы не можете передать 'task' как' const std :: shared_ptr & 'вашему конструктору? –
GeorgeAl