在不使用new的情况下初始化另一个类中的类对象是否安全?

时间:2014-08-26 07:51:59

标签: c++

我有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);
            }
};

2 个答案:

答案 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