[問題] 兩個關於暫時物件的問題

看板C_and_CPP (C/C++)作者 (老王)時間16年前 (2009/08/10 20:42), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
第一個問題和字串相關 class A { public: A(); void printName(); private: const char *m_pName; }; A::A() { m_pName = "Andy"; } void A::printName() { printf("%s\n", m_pName); } int main() { A a; a.printName(); // print Andy return 0; } 在printName印出來的值為什麼會是對的呢? 照理講 m_pName 在跳出A的constructor之後 不是就應該指到被刪除的空間嗎? 但是我測試的結果是正常的(還是剛好而已) 第二個問題是關於暫時物件被刪除的時間點 這是我在玩QT時遇到的問題 ===============ver1================= QString mystring1="hallo", mystring2="nihowma"; const char *data1 = qPrintable(mystring1); const char *data2 = qPrintable(mystring2); qDebug("%s %s\n", data1, data2); // error ===============ver2================= QString mystring1="hallo", mystring2="nihowma"; qDebug("%s %s\n", qPrintable(mystring1), qPrintable(mystring2)); 其中 qPrintable會回傳一個暫時物件 所以在ver1的結果是錯的 但在ver2中 我在同一個句子裡面用了兩次qPrintable 不知道這樣會不會有問題? 我想問說 第一個qPrintable所產生的暫時物件 會在第二個qPrintable產生暫時物件後就被刪掉 還是這整個句子執行完後才會被殺掉? 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.66.129

08/11 01:12, , 1F
第一個問題,"Andy"用的不是暫時的空間
08/11 01:12, 1F

08/11 12:38, , 2F
不好意思 那請問"Andy"這個字串什麼時候會被刪除呢?
08/11 12:38, 2F

08/12 02:35, , 3F
程式結束
08/12 02:35, 3F

08/13 00:08, , 4F
喔喔 知道了 謝謝你
08/13 00:08, 4F
文章代碼(AID): #1AW1MhR3 (C_and_CPP)
文章代碼(AID): #1AW1MhR3 (C_and_CPP)