臨時物件位址的小問題

2021-04-14 21:11:45 字數 1035 閱讀 2569

其實今天想嘗試一下容器和迭代器的使用,但是卻感受到了其他一些問題的重要性,就是對於臨時物件的一些理解,有時候我們認為關於乙個mian函式種的臨時定義是很方便的,可以暫時為我們儲存一下物件,可以作為乙個臨時物件,不管是int,char還是string,還是其他自定義物件的臨時儲存,關鍵是討厭的指標……

很簡單的乙個例子,其實就是輸入pair,然後轉存到vector中,開始的時候我用的是vector定義,畢竟存個物件很簡單

#include

#include

#include

#include

using namespace std;

int main()

for (vector::iterator iter = evec.begin(); iter != evec.end();++iter)

當然可以正常執行,呵呵,畢竟很簡單的思路,後來我想要不在vector存指標吧,如vector,所以就

int main()

for (vector::iterator iter = evec.begin(); iter != evec.end();++iter)

{cout<<(**iter).first<<"..."<<(**iter).second《結果可想而知,輸出的物件其實都是最後一次你輸入的資料,本人腦子轉的慢,起初認為是迭代器出問題,但是後來細想下,在容器輸出中加入語句

cout<<*iter《結果發現位址其實是一樣的,也就是說我在容器中存入的所有物件的位址都是一樣的,均是是最後一次輸入對像的位址,但是如果一開始就跟蹤的話,我們發現這就是我們臨時物件的位址,從我們第一次輸入物件就使用這個位址,直到最後一次輸入,我們反覆的使用這一位址,不停地在同一位址進行反覆的新建物件,呵呵!很愚蠢的行為。。。

所以我們應該。。。

element* element;

element = new element;

*element = make_pair(name,age);

evec.push_back(element);

所有有時我們應該對拷貝位址指標的情況稍微注意一下

小問題大思考之C 臨時物件

c 中有這樣一種物件 它在 中看不到,但是確實存在。它就是臨時物件 由編譯器定義的乙個沒有命名的非堆物件 non heap object 為什麼研究臨時物件?主要是為了提高程式的效能以及效率,因為臨時物件的構造與析構對系統效能而言絕不是微小的影響,所以我們應該去了解它們,知道它們如何造成,從而盡可能...

關於C 中的臨時物件問題

關於c 中的臨時物件問題 c 中真正的臨時物件是看不見的,它們不出現在你的源 中,臨時物件的產生在如下幾個時刻 1.用建構函式作為隱式型別轉換函式時,會建立臨時物件。例 class integer integer private int m val void calculate integer it...

臨時物件的生成

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 nt...