Ich habe einige Code wurde die Überprüfung, die wie folgt aussieht:Verzögerte Konstruktor in C++
class A; // defined somewhere else, has both default constructor and A(int _int) defined
class B
{
public:
B(); // empty
A a;
};
int main()
{
B* b;
b = new B();
b->a(myInt); // here, calling the A(int _int) constructor,
//but default constructor should already have been called
}
funktionierts? Aufruf eines bestimmten Konstruktors nach dem Standard wurde bereits aufgerufen?
Dies scheint der Fall zu sein, danke. –
Es ruft nur "A :: operator() (int)", wenn diese Funktion deklariert ist? Ich bin beeindruckt, dass Sie feststellen konnten, dass diese Funktion deklariert wurde! –
@Richard: Ich bin mir nicht sicher, worauf Sie hinaus wollen. Wenn die Funktion nicht deklariert wurde, wird der Code nicht kompiliert. Unter der Annahme, dass der Code * kompiliert, bedeutet dies, dass der Operator definiert werden muss. Es gibt keine Mehrdeutigkeit. Die Syntax, die man benutzt, kann * niemals * einen Konstruktor aufrufen, wenn man das erreicht. Um das zu tun, müssten Sie stattdessen b-> a :: A (myInt) schreiben. Die in Richs Frage gezeigte Syntax kann * nur * Operator() aufrufen. – jalf