C++我可以期望所有编译器都不会破坏被返回的副本吗?

use*_*343 1 c++ destructor

#include <iostream>
using namespace std;

class ClassA {
    int k;
public:
    ClassA(int i) : k(i) 
    {
    }

    ~ClassA()
    {
        cout << "A destroyed" << " k=" << k << endl;
    }

    ClassA copyAndModify() 
    { 
        ClassA a(k*2);
        return a; 
    }

    void taunt() 
    {
        cout << k << endl;
    }
};

int main (int argc, char * const argv[]) {
    ClassA original(1)
    ClassA modified = original.copyAndModify();
    modified.taunt();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为当方法返回时,对象'a'(内部方法copyAndModify)被解构,但事实并非如此.这是否意味着在方法中创建的所有正在返回的对象都不会被解构?这适用于所有编译器吗?

Joh*_*nck 7

您遇到了返回值优化.不,它在所有编译器上都不一样.