假設我有一個類A,它使用動態內存分配,如數組或矩陣。在創建對象A的過程中,通過構造函數傳遞參數來確定分配多少內存空間。處理無法以預定方式創建的對象,C++
class A
{
int * ptr;
int size;
void allocate() noexcept;
void destroy() noexcept;
public:
A(int) noexcept;
~A() noexept;
}
void A::destroy() noexcept
{
if(ptr!=nullptr)
delete [] ptr;
}
A::~A() noexcept
{ destroy();}
void A::allocate() try
{
ptr = new int[n];
}
catch (std::bad_alloc & ex)
{
std::cerr << ex.what();
destroy();
}
A::A(int n) noexcept : size(n) { allocate(); };
這些東西是一種很好的做法,設計明智嗎?對於無法以預定方式創建的對象會發生什麼情況?它會像「殭屍」一樣「活着」嗎?還是會被摧毀?
在矩陣方案中該怎麼辦,矩陣分配多個新的陳述?
智能指針,STL和那種東西不是這裏的一個選項。
讀我:這個班是純粹爲此類問題而設的示範班。它並不遵循0/3/5的規則,因爲編寫代碼太多隻是針對一個問題,對於這個問題並不重要。關於這些問題已經存在一堆問題。
爲什麼不讓應該扔掉的東西扔掉? – juanchopanza
爲什麼在失敗的分配中調用'destroy'?未能分配意味着你沒有任何東西來「刪除」。 –
「這是一個很好的解決方案嗎?」 - 什麼問題? –