2010-08-04 4 views
1

de Possible en double:
Do the parentheses after the type name make a difference with new?C++ - Quelle est la différence entre ClassA * pClassA = new ClassA et ClassA * pclassA = new ClassA()

Bonjour à tous,

/* Désolé pour mon message original et je corrige ma question comme suit */

Supposons que t chapeau ClassA est une classe C++ bien défini et a un constructeur par défaut, etc. Quelle est la différence entre les deux cas suivants:

ClassA* pClassA = new ClassA; // case I 
classA* pClassA = new ClassA(); // case II 

Il a été considéré comme une bonne pratique d'utiliser le cas I si possible.

Pour quelle raison? Parce que dans le cas où seul le constructeur par défaut de ClassA sera appelé, alors que dans le cas II, une instance temporaire de ClassA sera construite.

Est-ce correct?

Merci

+1

vous pouvez toujours tester votre propre devinette en créant constructeur de copie et constructeur par défaut et en plaçant à l'intérieur copie cteur point d'arrêt. – Andrey

+1

Non, ce n'est pas correct. Et cela a déjà été demandé plusieurs fois. –

+0

@Andrey Ou juste rendre le constructeur de copie privé. –

Répondre

1

Pour le cas d'un constructeur défini que vous avez spécifié, il n'y a pas de différence. Vous pouvez le tester en exécutant ce programme:

#include <iostream> 

struct A { 
    A() { std::cout << "A()" << std::endl; } 
    A(const A&) { std::cout << "A(const A&)" << std::endl; } 
    A& operator=(const A&) { std::cout << "operator=(const A&)" << std::endl; } 
    ~A() { std::cout << "~A()" << std::endl; } 
}; 

int main() { 
    A *p1 = new A; 
    A *p2 = new A(); 
} 
+0

Les instructions de trace ne sont pas particulièrement utiles pour déterminer quand les constructeurs de copie sont appelés. Dans ce cas, les résultats sont corrects, mais seulement parce que le constructeur de copie n'est pas légitimement supposé être appelé. –

+0

Cette question est répondue ici: Les parenthèses après le nom de type font-elles une différence avec le nouveau? Merci – q0987

Questions connexes