我有2个A和B类。我在B中声明了A类的对象。我正在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);
}
};
答案 0 :(得分:1)
如果你想让B里面的聚合A一直初始化,那就说3做得更好:
class A{
public:
int x;
A(){
x=0;
}
A(int a){
x=a;
}
};
class B{
public:
A objA;
B() : objA(3)
{
}
};
如果B中没有指针和缓冲区,则不必担心内存分配等。对象objA只有在B开始存在时才开始存在,B * b = new B(),将分配所有必要的内存。但是,最好以这种方式初始化所有聚合,如objA,而不是使用assign运算符。
答案 1 :(得分:-3)
是的,它实际上是一种错误的使用方法。
你这样做的事实:
B(){
ojbA=A(3);
}
创建一个对象A并使用它的复制构造函数影响变量objA,但是你还没有定义它。
这样做会更好: B():objA(3){}
如果你不明白这个代码示例是如何工作的,我会邀请你去关注初始化列表(http://www.cprogramming.com/tutorial/initialization-lists-c++.html)