臨時物件的生成

2021-07-12 02:50:06 字數 2613 閱讀 9777

class crectangle 

crectangle(int i = 1, int j = 2);

~crectangle();

static

void printtotal();

void print()

protected:

private:

int w, h;

static

int ntotalarea;

static

int ntotalnumber;

};crectangle::crectangle(int i, int j)

crectangle::~crectangle()

int crectangle::ntotalarea = 0;

int crectangle::ntotalnumber = 0;

void crectangle::printtotal()

int main()

c3 = 40; 這邊其實會生成臨時物件,呼叫普通的建構函式,不是拷貝建構函式,只是臨時物件很快消亡,我是在建構函式裡面「動了手腳」才最終看得到生成新物件的。

int main()
此時不會呼叫建構函式

注意此時不是引用啊,此時,生成臨時物件,然後拷貝建構函式裡面沒有及時加上1,在最後的析構函式裡面就減去1。

如果改變:

又或者改變拷貝建構函式

注意,生成的是obj的臨時物件,change函式裡面還自乘2,所以一下子減去18了。

class crectangle 

protected:

public:

int w, h;

private:

static

int ntotalarea;

static

int ntotalnumber;

};crectangle::crectangle(crectangle &to)

crectangle::crectangle(int i, int j)

crectangle::~crectangle()

int crectangle::ntotalarea = 0;

int crectangle::ntotalnumber = 0;

void crectangle::printtotal()

crectangle experiment(crectangle &obj)

int main()

這時候,在前面基礎上都能夠清除了,還有,析構函式總是就近原則,後生成的先析構調。

引數是物件

返回乙個物件

強制轉換

似乎呼叫拷貝建構函式和臨時物件生成是不分開的。

匿名物件?臨時物件?

關於匿名物件與臨時物件,這個概念不是絕對的,概念的區分往往十分拗口難記。要根據作用域,生存時間和用法來來決定 工作多年這些拗口的概念我從來沒有真的記住過,也沒有乙個部落格講清楚他們的區別。這裡我們參考 effective c 中得稱謂,稱之為區域性物件。但是區域性也是有範圍得。下面論證。1無名則無份...

建立物件的過程(臨時物件)

class cgoods cgoods cgoods float price cgoods const cgoods rhs const 1.防止實參被修改 2.接收隱式生成的臨時量 下面對執行結果分析 cgoods good1 good1 1,1.1 呼叫帶三個引數的建構函式 堆區 cgoods ...

C 臨時物件

臨時物件的產生 1.用建構函式作為隱式型別轉換函式時。2.建立乙個沒有名字的物件時。直接寫下 ctempobj 輸出 init obj exit obj 不單調用了建構函式,還呼叫了析構函式.既然是物件也可以這樣使用 ctempobj fun 不過這樣使用可要小心了 new ctempobj fun...