Почти правильно. При объявлении конструктора в классе просто пишите A
, а не A::A
; вы будете использовать A::A
, когда дадите определение для конструктора вне объявления класса. Иначе да.
Кроме того, как указывает Джеймс, если вы не копируете объект, к которому вы обращаетесь через указатель, вам не нужно выполнять разыменование (если это значение или ссылка). Как правило, указатели не используют указатели, если в этом нет необходимости. По этому принципу у вас будет что-то вроде:
A x; // Invoke default constructor
// ...
// do some thing that modify x's state
// ...
A cpy(x); // Invokes copy constructor
// cpy now is a copy of x.
Обратите внимание, что первый оператор A x
вызывает конструктор по умолчанию. C ++ обеспечит реализацию этого конструктора по умолчанию, но это может быть не то, что вы хотите, и даже если это то, что вы хотите, лучше придерживаться стиля, IMHO, явно указывать его, чтобы другие программисты знали, что вы об этом подумали .
Редактировать
C ++ автоматически предоставит реализацию конструктора по умолчанию, но только если вы не предоставите никаких пользовательских конструкторов - как только вы предоставите свой собственный конструктор, компилятор не будет автоматически генерировать конструктор по умолчанию. По правде говоря, я забыл об этом, так как привык сам давать все определения конструкторов, даже если они не являются строго необходимыми. В C ++ 0x можно будет использовать = default
, что обеспечит простоту использования конструктора, сгенерированного компилятором, и в то же время сделает его понятным для других разработчиков.