使用' new'在构造函数? C ++

时间:2016-09-11 15:47:58

标签: c++ constructor new-operator

假设我有两个类,myclass1和myclass2。假设myclass2有一个字段myclass1 object1。所以myclass2标题看起来像这样:

 class myclass2 {
      public:
             myclass2();
             myclass2(int arg);
      private:
             myclass1 object1;
}

假设myclass1有这样的标题:

 class myclass1 {
      public:
             myclass1();
             myclass1(int arg);
      private:
             int var1;
}

现在假设在我的main函数中我想实例化一个myclass2类型的对象,如下所示:

int main(){

         myclass2 object2(int VAR);

}

然后,为了使object2的私有字段object1在实例化object2时将私有字段var1设置为等于VAR,myclass2的构造函数是否应该像这样(?):

myclass2::myclass2(int arg){
         object1 = object1(arg);

}

或者这可行(?):

   myclass2::myclass2(int arg){
         object1(arg);

}

或者在这种情况下我必须在myclass1中使用mutator函数来访问myclass2的构造函数中的object1' s私有字段var1?

最后,这会完成工作(?):

 myclass2::myclass2(int arg){
         myclass1 *type1pointer;
         type1pointer = new myclass1(arg);
         object1 = *type1pointer; 

}

1 个答案:

答案 0 :(得分:6)

使用initializer list

class myclass2 {
public:
    myclass2(int arg) : object1(arg) {}
private:
    myclass1 object1;
};

因此,您只初始化对象一次。 这样,不调用object1默认构造函数,从而避免默认构造,然后是特定的myclass1 mutator