我不明白原始指針相當好,不幸的是我不是允許使用<vector>
s,所以我無法弄清楚如何編寫一個類的參數化構造函數,該類具有另一個類對象的數組其財產。如何將對象的動態數組傳遞給另一個類的參數化構造函數?
class A{
...
};
class B{
int size;
A *arr;
...
B(int, const A *); // am I declaring this right?
}
...
B::B(int size_, const A *arr_) { // this is the constructor I'm trying to write
size = size_;
if (arr != nullptr) delete[] arr;
arr = new A[size];
memcpy(arr, arr_, sizeof(A) * size);
}
如何通過這個參數而不會搞亂內存?上面的代碼無法正常工作,所以我想聽聽一些提示。我沒有設法谷歌的解決方案,雖然它似乎像我的問題已經回答,我在這種情況下道歉。
我不允許使用任何安全std::
東西。我需要弄清楚如何使用C.Oops的手動內存分配工作,我的意思是來自C++,感謝您指出這一點。
所以這裏是爲我工作至今的構造:
B::B(int size_, const A *arr_) {
size = size_;
arr = new A[size_];
for (int i = 0; i < size; i++) arr[i] = arr_[i];
}
感謝大家的時間!
您需要提供完整的測試用例。請參閱此處:http://stackoverflow.com/help/mcve您提供的代碼中沒有足夠的信息來告訴您什麼是錯誤的。 – xaxxon
你可以使用'std:array'嗎? –
'if(arr!= nullptr)delete [] arr;'在你的構造函數中不太可能是你想要的。呃,實際上這只是錯誤的。除非你知道'A'是可複製的,否則使用'memcpy'就是錯誤的。 – jxh