Ich lerne über C++ 11 Funktionen, speziell shared_ptr
, und ich habe ein Problem mit Bezug auf this
und verwenden Sie es als Referenz für andere Klassen.Mit "this" als shared_ptr?
Der Grund dafür ist, dass ich eine Simulation
Instanz habe, die an andere Instanzen innerhalb der Simulation weitergegeben wird (z. B. Apple
), so dass sie die Simulation selbst modifizieren oder sogar selbst aus der Simulation entfernen können.
In meinem komplexeren Code bekomme ich einen double free
Fehler (wenn das Programm existiert), die wie ich from here verstehe, dass ich keine shared_ptr
zweimal auf dem gleichen rohen Objekt erstellen sollte. Wie übergebe ich this
an das Apple
Objekt als shared_ptr
, wenn die Simulationsklasse nicht weiß, dass this
bereits ein shared_ptr
ist?
Mein Gedanke ist, die shared_ptr
in der Initialisierung Argumente übergeben, aber das scheint überflüssig, z.B .:
// The argument is a std::shared_ptr<Simulation>
simulation->initSomethingElse(simulation);
Vielleicht mein Verständnis ist, ich versuche, dies in einem ungewöhnlichen Muster zu implementieren, oder vielleicht auch nicht ganz richtig? Vielleicht gibt es dafür einen schöneren Weg?
Ich habe ein vereinfachtes Beispiel unter:
#include <memory>
class Simulation;
class Apple {
public:
void init(std::shared_ptr<Simulation> simulation) {
this->simulation = simulation;
};
private:
std::shared_ptr<Simulation> simulation;
};
class Simulation {
public:
void initSomethingElse() {
auto apple = std::shared_ptr<Apple>(new Apple());
// incorrect second reference to the raw pointer
apple->init(std::shared_ptr<Simulation>(this));
};
};
int main() {
auto simulation = std::shared_ptr<Simulation>(new Simulation());
simulation->initSomethingElse();
return 0;
}
Wo zerstören Sie die 'shared_ptr' Instanzen? –
Dai