У меня есть 2 класса A и B. Я объявляю объект класса A в B. И инициализирую объект в конструкторе класса B. Это неправильный способ сделать это? Я имею в виду, будет ли память, выделенная для ojbA, всегда доступной или она будет уничтожена при завершении конструктора B. Кроме того, это просто пример. Вы можете предположить, что я могу инициализировать a = 0 вместо определения отдельного конструктора. Но скажем, его не допускают.
class A{
public:
int x;
A(){
x=0;
}
A(int a){
x=a;
}
};
class B{
public:
A objA;
B(){
ojbA=A(3);
}
};
Если вы хотите, чтобы агрегат A внутри B инициализировался всегда, чтобы сказать 3, лучше сделать это:
class A{
public:
int x;
A(){
x=0;
}
A(int a){
x=a;
}
};
class B{
public:
A objA;
B() : objA(3)
{
}
};
Если у вас нет указателей и буферов в B, вы не должны беспокоиться о распределении памяти и т.д. Object objA начнет существовать только тогда, когда B начнет существовать, B * b = new B(), выделит всю необходимую память. Однако лучше инициализировать все агрегаты, такие как objA, вместо использования оператора присваивания.
Да, это на самом деле неправильный способ его использования.
Тот факт, что вы это делаете:
B(){
ojbA=A(3);
}
Создайте объект A и примените переменную objA, используя ее конструктор копирования, который вы не определили.
Было бы лучше сделать это следующим образом: B(): objA (3) {}
И если вы не понимаете, как работает этот образец кода, я приглашаю вас посмотреть список инициализации (http://www.cprogramming.com/tutorial/initialization-lists-c++.html)
Second
не является хорошим именем для конструктора класса с именемB