1. int main() {
    2. A * p = new A[2];
    3. A * p p2 = new A;
    4. A a;
    5. delete []p;
    6. }

    上例中一共调用3次析构函数,因为new出来的对象,如果不delete,就不会调用析构函数

    • 不同的编译器中复制构造函数的表现是不同的

    image.png

    • 因为gcc对这段代码进行了优化,VS是根据C++标准
    • gcc直接将b的返回值给了a,而没用生成临时对象。