程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> [zdd]的一個疑問

[zdd]的一個疑問

編輯:關於C++

#include <iostream>
using namespace std;

struct A
{
    A() { cout << "A()" << endl; }
    //A( const A& ) { cout << "A(A)" << endl ;}
    A& operator=( const A&  ) { cout << "A=A" << endl; }
    ~A() { cout << "~A()" << endl; }
};

A foo( A a )
{
    cout << "---" << endl;
    return a;
}

int main(void)
{
    {
        foo( A() );
    }

    system( "pause" );
    return 0 ;
}

在 VC++2005 下輸出為:

A()
---
~A()
~A()
~A()

為什麼 return a; 會調用2次析構函數?

---------------------------------- 簡化一下----------------------------------

#include <iostream>
using namespace std;

struct A
{
    A() { cout << "A()" << endl; }
    //A( const A& ) { cout << "A(A)" << endl ;}
    A& operator=( const A&  ) { cout << "A=A" << endl; }
    ~A() { cout << "~A()" << endl; }
};

void foo( A a )
{
}

int main(void)
{
    {
        foo( A() );
    }

    system( "pause" );
    return 0 ;
}

VS2005中的怪異現象描述:

如果沒有 A( const A& ) { cout << "A(A)" << endl ;}

那麼輸出

A()
~A()
~A()

如果加上 A( const A& ) { cout << "A(A)" << endl ;}

那麼輸出

A()
~A()

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved