2013-06-26 20 views
1

抱歉,字符串成員變空。下面的代碼可能有助於描述問題。 我alreay成立了Student類。 如果這樣做了這種方式:如果對標題使用* pt =&stu1

Student stu1(score, "sam",5, "aaa", "[email protected]","156412", "518105"); 
Student *tempSt = &stu1; 

我嘗試cout的串部件tempSt,它的工作原理。

tempSt = &Student(score, "sam",6, "aaa", "[email protected]","156412", "518105"); 

正在發生的事情: 但是當串部件變空? 希望你能理解我可憐的描述:)

更新:

問題源於此:

void myList::add(Student *a) { 
slistNode *tempNode = new slistNode(); 
tempNode->data = a; 

if(lastNode == NULL) { 
    headNode = tempNode; 
    lastNode = tempNode; 
} else { 
    lastNode->next = tempNode; 
    lastNode = tempNode; 
} 

++listLength; 

}

我試圖把那些OBJ文件到列表中,所以我想那些obj是暫時的(實際上我希望他們沒有名字)。我不想讓很多像OBJ文件屋頂盒,屋頂盒2,stu3 ....

slistNode類:

class slistNode { 
public: 
slistNode() { 
    next = NULL; 
} 
Student *data; 
slistNode *next; 
}; 
+7

是啊。臨時 - >銷燬 - > UB。 – 2013-06-26 07:54:05

回答

4

你得到一個指向一個臨時對象。該指針指向的對象將在代碼到達下一行之前被破壞。由於對象被銷燬,當然訪問字符串成員會調用未定義的行爲。

+0

在什麼情況下臨時對象不會被破壞? – chbdetta

+0

沒有這種情況。這就是爲什麼它是暫時的** –

+2

@chbdetta:當你的const構造對象與'const Student&s = Student(...)'一樣時,只要你的變量是在適用範圍。但不要依賴這種行爲。 – xtofl

3

在第二種情況下,這樣的:

Student(score, "sam",6, "aaa", "[email protected]","156412", "518105"); 

構建臨時對象。這是建設後立即遭到破壞。以其地址調用undefined behavior

(如果你開始℃,而不是C++中,編譯器甚至不會允許你自殺。耶在C++呆頭呆腦的設計決策!)

+0

我應該如何解決這個問題? – chbdetta

+0

@chbdetta您堅持第一個選項:將其分配給一個變量。 – 2013-06-26 07:58:11

+0

@chbdetta不要使用指針。 –

相關問題