Kann ich "this" innerhalb des Klassenkonstruktors an eine Funktion als Zeiger übergeben und damit auf die Mitglieder des Objekts zeigen, bevor der Konstruktor zurückkehrt?Weitergabe von "this" an eine Funktion innerhalb eines Konstruktors?
Ist dies sicher, solange die aufgerufenen Mitglieder vor dem Funktionsaufruf ordnungsgemäß initialisiert werden?
Als Beispiel:
#include <iostream>
class Stuff
{
public:
static void print_number(void *param)
{
std::cout << reinterpret_cast<Stuff*>(param)->number;
}
int number;
Stuff(int number_)
: number(number_)
{
print_number(this);
}
};
void main() {
Stuff stuff(12345);
}
Ich dachte, das würde nicht funktionieren, aber es scheint. Läuft dieses Standardverhalten oder nur undefiniertes Verhalten auf meinem Weg?
Halbwahr. Denken Sie zweimal darüber nach, bevor Sie dies in einem Konstruktor verwenden, insbesondere wenn etwas von der Klasse abgeleitet werden könnte. In diesem Fall arbeiten Sie mit einer partiell konstruierten Klasse und virtuelle Aufrufe sind, afaik, undefined. Dasselbe gilt für den allgemeinen 'Klassenstatus': Der abgeleitete Konstruktor kann ihn immer noch modifizieren. – user52875