作者bgcrwf (老王)
看板C_and_CPP
標題[問題] 兩個關於暫時物件的問題
時間Mon Aug 10 20:42:14 2009
第一個問題和字串相關
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
1F:推 dendrobium:第一個問題,"Andy"用的不是暫時的空間 08/11 01:12
2F:→ bgcrwf:不好意思 那請問"Andy"這個字串什麼時候會被刪除呢? 08/11 12:38
3F:推 dendrobium:程式結束 08/12 02:35
4F:→ bgcrwf:喔喔 知道了 謝謝你 08/13 00:08