2011-10-22 3 views
1

Supposons que j'ai ceci:C++ répartition des membres de la classe

class foo{ 
    Member member; 
    foo(); 
    ~foo(); 
}; 

Comment j'affecter le membre?

EDIT: Comment dois-je lui dire quel constructeur à utiliser (désolé pour être clair)

Maintenant, je sais déjà au sujet de la member = Member(...); syntaxe

Est-ce que cette cause de fuite de mémoire?

{ 
    Memory *temp = new Member(); 
    member = *(temp); //will it work at all??(is it copy constructor?) 
    delete temp; 
} 
+0

Pourquoi le type 'Memory *' est-il présent? –

+0

J'ai déjà trouvé que je devrais utiliser memory = Member(); sans le nouveau .. merci quand même – Vladp

Répondre

6

C++ n'est pas Java. Ce membre est déjà alloué. Il fait partie de la mémoire de l'instance dans laquelle il se trouve. Il sera construit (initialisé) par le constructeur de l'instance conteneur. Le mot clé new n'a rien à voir avec un membre qui n'est pas un pointeur.

+0

Il est à noter que le modèle utilisé où un membre est affecté sur le tas et ensuite affecté au membre pourrait en fait entraîner une fuite de mémoire. Si l'opérateur d'attribution de copie renvoie une exception, il y aura fuite de temp. –

2

En supposant Member n'est pas un typedef pour un type de pointeur, soit il est pas défini comme, disons,

typedef int* Member; 

vous n'avez rien à faire pour l'affecter comme il est attribué automatiquement lorsque vous allouer des instances de foo.

0

EDIT: Comment dois-je lui dire quel constructeur à utiliser (désolé pour être clair)

comme ceci:

foo::foo() : member(...) // member initializer list 
{ 
} 
0

Comment dois-je lui dire quel constructeur de utilisation?

Member member dans la déclaration de classe ne demande pas tout constructeur mais comme il est juste déclaration. Toutefois, lorsque vous le définissez plus tard, vous devez utiliser member(), member ou member(arg,..) pour définir l'objet membre et appeler un certain constructeur.

Le code est correct et cela fonctionne. Notez simplement qu'il appellera l'opérateur d'affectation et non le constructeur de copie.

Questions connexes