作者 主題: C++傳參考的疑惑  (閱讀 1403 次)

0 會員 與 1 訪客 正在閱讀本文。

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
C++傳參考的疑惑
« 於: 2014-04-17 14:11 »
各位大大
小弟對於std class有些疑慮
拿queue來做個例子

#include <iostream>
#include <queue>

using namespace std;
class t{
private:
        int i;
public:
        t(int j){
                i=j;
        }
        void p(){
                cout << this << endl;
                cout << i <<endl;
        }   
};

queue<t> q;
int main(){
 {
  t a(12);
  q.push(a);
  a.p();
 }//A的生命週期到此結束
 q.front().p();
}

用G++編譯並執行的結果
0x7fff318594f0
12
0x10772c0
12

小弟想表達的是
queue.push傳入的引數不是用參考嗎
為何用front傳出的位址卻是不同
是我哪裡的觀念錯了呢?
提出這樣的問題
主要是如果
傳參考成立的話
那a的生命週期結束
q.front().p()
這語法就未必能正常執行了
究竟真象是什麼?
煩請大大解釋,去除小弟心中的疑慮
感恩

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
Re: C++傳參考的疑惑
« 回覆 #1 於: 2014-05-09 14:03 »
push 進去時,queue 的行為是複製一份。
你可以加上 copy constructor 來觀察
代碼: [選擇]
  class t{
  private:
          int i;
  public:
          t(int j){
                  i=j;
          }
          void p(){
                  cout << this << endl;
                  cout << i <<endl;
          }
          t(const t& p) {  // copy constructor
              cout << "copy ctor()." << endl;
              i = p.i;
          }
  };
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org