2016-05-13 2 views
0

Ich habe eine Struktur Box und einen Vektor von Zeigern auf Box-Objekte wie so,Ist es möglich, Adresse von Selbst zu Vektor auf Strukturaufbau zu schieben?

struct Box { 
    int number; 
    Box() { 
     /* Push address of self to the vector here */ 
     /* All I need is a way to access the address of self */ 
    }; 
}; 

std::vector<Box*> Boxes; 

Ich versuche, die Erstellung von Objekten zu machen (für GUI-Elemente) erleichtern, indem die Adresse des Objekts zu einem Vektor drängen wenn erstellt. Auf diese Weise kann ich die Mitglieder des Objekts nach der Erstellung bearbeiten und muss nicht manuell auf Vektor schieben.

Kann man im Objektkonstruktor auf die Adresse von self zugreifen?

+0

vorsichtig. Sie dürfen diesen Zeiger nicht verwenden, um Funktionen aufzurufen, bis das Objekt vollständig aufgebaut ist. Dies ist UB, wenn die Funktion virtuell ist (und Sie nicht die Annahme machen wollen, dass eine Funktion in zukünftigen Versionen des Codes nicht virtuell bleibt). –

Antwort

2

Boxes.push_back(this); ist alles was Sie brauchen. Denken Sie auch daran, es in Destruktor zu entfernen, um die Verwendung nach dem freien zu vermeiden.

std::vector<Box*> Boxes; 

struct Box { 
    int number; 
    Box() { 
     Boxes.push_back(this); 
    }; 
    ~Box() { 
     Boxes.erase(std::remove(Boxes.begin(), Boxes.end(), this), Boxes.end()); 
    } 
}; 

Online-Demo: http://coliru.stacked-crooked.com/a/b0db13cfdff4a70b

Verwandte Themen