初始化列表中的c ++ self

n00*_*00b 0 c++ initialization-list

我有这段代码

class Osoba{
         Osoba(char* imie,int wiek){                         
                     this->imie=new char[strlen(imie)+1];
                     strcpy(this->imie,imie);
                     this->wiek=wiek;
                     cout<<"Utworzono Osobe "<<this->imie<<endl;
         }
         Osoba(Osoba& x){
                 Osoba(x.imie,x.wiek);
         }
[...]
Run Code Online (Sandbox Code Playgroud)

当我调用复制构造函数时,它不起作用(创建和销毁对象).

编辑:如果我使用

         Osoba(Osoba& x): Osoba(x.imie,x.wiek){
Run Code Online (Sandbox Code Playgroud)

我明白了 type 'class Osoba' is not a direct base of 'Osoba'

怎么做的?

小智 10

你不能这样调用构造函数.嗯,你可以,但会发生什么是无名的临时对象被创建.编写复制构造函数而不引用其他构造函数.此外,如果使用std :: string而不是char*,则不需要复制构造函数.如果你坚持使用char*,你还需要一个析构函数和赋值运算符.