在C++中初始化为自身的对象

zLe*_*eon 3 c++ initialization class object self

例如,我有代码:

class test{
    public:

    test(){
        cout<<endl<<"TEST";
    }

    void another(){
        cout<<endl<<"Another";
    }

};

int main(){
    test chk = chk;
    chk.another();
}
Run Code Online (Sandbox Code Playgroud)

在这里,我已经完成了新创建的类型对象的初始化test.

难道这样的初始化服务特殊用途,不这样初始化做任何事情,否则不是初始化test chk;代替test chk = chk;

我知道如果对象初始化为自身,则无法调用构造函数,但为什么呢?

我想了解更多关于对象自身的初始化.

Mar*_* A. 5

你被允许写:

test chk = chk;
Run Code Online (Sandbox Code Playgroud)

[basic.scope.declarative]/P1

第一个的潜在范围在此j之后立即开始j

一个隐含的拷贝构造函数因此被调用.您可能已经使用自己的方法执行一些额外的初始化:

test(const test&) {
  cout << endl << "copy ctor";
}
Run Code Online (Sandbox Code Playgroud)

请记住,这不是一个好的做法,在某些情况下甚至可能会导致未定义的行为,Clang总是会发出-Wuninitialized警告.