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

Sam*_*Sam 1 c++ constructor new-operator

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

 class myclass2 {
      public:
             myclass2();
             myclass2(int arg);
      private:
             myclass1 object1;
}
Run Code Online (Sandbox Code Playgroud)

并假设myclass1有一个像这样的标题:

 class myclass1 {
      public:
             myclass1();
             myclass1(int arg);
      private:
             int var1;
}
Run Code Online (Sandbox Code Playgroud)

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

int main(){

         myclass2 object2(int VAR);

}
Run Code Online (Sandbox Code Playgroud)

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

myclass2::myclass2(int arg){
         object1 = object1(arg);
Run Code Online (Sandbox Code Playgroud)

}

或者这会工作(?):

   myclass2::myclass2(int arg){
         object1(arg);
Run Code Online (Sandbox Code Playgroud)

}

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

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

 myclass2::myclass2(int arg){
         myclass1 *type1pointer;
         type1pointer = new myclass1(arg);
         object1 = *type1pointer; 
Run Code Online (Sandbox Code Playgroud)

}

Jar*_*d42 6

使用初始化列表:

class myclass2 {
public:
    myclass2(int arg) : object1(arg) {}
private:
    myclass1 object1;
};
Run Code Online (Sandbox Code Playgroud)

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