[問題] 兩個關於暫時物件的問題
第一個問題和字串相關
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
08/11 01:12, 1F
→
08/11 12:38, , 2F
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章