為什么test01在創建變數p時沒有使用建構式,也沒有對臨時物件析構,我認為test01和test02使用的解構式應該一樣才對吧。
#include<iostream>
using namespace std;
class Person
{
int m_age;
public:
Person()
{
cout << "默認構造" << endl;
}
Person(int age):m_age(age)
{
cout << "有參構造" << endl;
}
Person(const Person &p)
{
m_age = p.m_age;
cout << "復制建構式" << endl;
}
~Person()
{
cout << "析構構造" << endl;
}
};
Person dowork()
{
Person p1;
return p1;
}
void test01()
{
Person p = dowork();
}
void test02()
{
Person p;
p = dowork();
}
int main()
{
cout << "test01 :" << endl;
test01();
cout << "test02 :" << endl;
test02();
system("pause");
return 0;
}
uj5u.com熱心網友回復:
但是test只使用了兩次解構式,它應該有區域變數p1析構,臨時物件析構,還有變數p析構應該三次和test02一樣才對uj5u.com熱心網友回復:
老哥你搞懂了也回復我一下,我也想知道為什么?謝謝了uj5u.com熱心網友回復:
對于Person p = dowork(); 編譯器認為這個是個賦值陳述句,不會首先創建p物件,而是僅僅為p分配存盤空間,因此不會呼叫Person的建構式。而對于Person p; p = dowork();,在沒有任何優化的情況下,編譯器認為這是兩條陳述句,首先要呼叫Person建構式創建物件p,然后又呼叫p = dowork()將p的原有內容覆寫掉。如果打開優化開關,編譯器有可能會把這兩條陳述句合并成一條,不過這我就吃不準了。
uj5u.com熱心網友回復:
百度復制消除轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282749.html
標籤:C++ 語言
上一篇:求助帖 這道C語言不知道錯哪了
