假設在C++中,我有以下代碼:分配給動態數組時,內存是否在C++中分配?
class Foo {
private:
double* myData;
public:
Foo(double data[]) {
myData = data;
}
}
int main() {
double mainData[] = {1.0};
Foo myfoo(mainData);
}
據我所知可以告訴,當傳遞到Foo
構造mainData
被視爲一個指針,所以行myData = data
只分配指針地址。所以沒有額外的內存分配在這裏,對嗎?但是,Foo
類負責提供一個析構函數來釋放myData
的內存?或者我們有一個實際指向堆棧內存的動態數組指針嗎?
另外,如果我要保護Foo
的myData
從當mainData
改變不斷變化,有一個簡單的辦法迫使Foo
構造複製呢?理想情況下,myData
將是一個簡單的數組,不是指針,但將行double* myData
更改爲double myData[]
似乎不起作用,因爲直到運行時數組的大小才知道。
這類問題導致C++中出現很多錯誤。在您的程序中擁有明確的數據所有權策略非常重要。如果你想'Foo'擁有它的數據,用'std :: vector'替換'myData',並根據需要填充它。或者,如果大小在編譯時是固定的,那麼'double myData [SIZE]'。 –
japreiss