Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: November 2007
POD- und skalare Typen werden immer mit 0 (null) initialisiert, wenn sie mit der Standardkonstruktorsyntax instanziiert werden.
struct S {
void *operator new (unsigned int size, void*p, int i)
{
((S*)p)->i = i; return p;
}
int i;
};
struct T
{
int i;
char c;
};
class C
{
T t;
int i;
public:
C(): t(), i() {} // Zero initializes members of class.
};
// Zero initialize members of t.
// t->i == 0 & t->c == 0
T* t = new T();
// Call placement new operator for S, then
// zero initialize members of pS.
// pS->i == 0 & pS->i != 10
S s;
S* pS = new( &s, 10 ) S();
// Zero initialize *pI
// *pI == 0
int* pI = new int();
// Zero initialize members of c
// c.t.i == 0 & c.t.c == 0 & c.i == 0
C c;
Das Visual Studio .NET-Verhalten ignoriert die ()-Klammern nach der Initialisierung und lässt die Member immer nicht initialisiert. Um das Visual Studio .NET-Verhalten für Typen wiederherzustellen, die außerhalb der Initialisierungsliste eines Konstruktors initialisiert wurden, entfernen Sie die ()-Klammern folgendermaßen:
T* t = new T; // Members contain uninitialized data.
S s;
S* pS = new( &s, 10 ); // pS->i == 10
int* pI = new int; // *pI is uninitialized.
Um das Visual Studio .NET-Verhalten für Typen wiederherzustellen, die innerhalb der Initialisierungsliste eines Konstruktors initialisiert wurden, entfernen Sie die Initialisierung folgendermaßen aus der Liste:
class C
{
T t;
int i;
public:
C() {} // Members of class are not initialized.
};