Ich habe einen Code wie den folgendenPassing Shared_ptr dieses in Konstruktor
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();
}
Wenn ich es laufen bekomme ich ein
$ terminate called after throwing an instance of 'std::bad_weak_ptr'
von diesem question Ich habe, dass ich nicht shared_from_this()
, bis das Objekt aufrufen kann ist vollständig aufgebaut. Ich denke, das bedeutet, dass ich keine Objekte vom Typ Attribute
im Konstruktor erstellen kann, aber ich sollte sie instanziieren, nachdem der Konstruktor endet.
Wissen Sie, ob es ein Weg ist, dieses Problem zu lösen, denn es wäre wirklich ärgerlich für mich, die Attribute-Objekte, die nicht im Konstruktor sind, instanziieren zu müssen.
Wird das 'Task'-Objekt von' std :: shared_ptr' verwaltet? – LogicStuff
Warum können Sie 'task' nicht als' const std :: shared_ptr & 'an Ihren Konstruktor übergeben? –
GeorgeAl