2017-07-30 91 views
-1

如果我在堆上分配一個新的對象,是否所有變量都定義在對象的類中也堆在堆上?C++堆對象有堆棧或堆成員?

例如,假設我有一個名爲_pos的數組中有一個x,y,z座標的Node類。對於用戶創建多個Node對象的緣故,節點聲明堆上爲:

Node n = new Node(0, 0, 0); 

我應該也宣佈在堆上的位置數組:

class Node { 
public: 
    Node(double x, double y, double z) { 
    _pos = new double[3] {x, y, z}; 
    } 

private: 
    double* _pos; 
} 

或者是_pos陣列已經考慮在堆上及以下工程,以及

class Node { 
public: 
    Node(double x, double y, double z) { 
    _pos = double[3] {x, y, z}; 
    } 

private: 
    double* _pos; 
} 

我猜第二個也被認爲是在堆上,在這種情況下,它也使釋放更容易一點,但我希望小號omeone可以確認。

+0

「我還應該在堆上聲明位置數組嗎?」不,這不是必需的。 (爲什麼會這樣?) – DimChtz

+0

兩種替代方法都完全不同。這裏沒有「正確」或「錯誤」,這取決於。只有你知道正確的答案是什麼,因爲只有你知道應用程序的其餘部分如何使用這些對象。要確定正確的答案,您需要查看C++書籍中關於對象,自動範圍和動態範圍的解釋。 –

回答

0

如果我在堆上分配一個新的對象,所有的變量都定義在堆上的對象的類中嗎?

是的。