在一個方法裏面可以從類中創建一個未初始化的對象嗎?C++:在一個方法裏面可以從類中創建一個未初始化的對象嗎?
這裏的一些背景:想象一個類,其中構造所有分配內存:
class NumberArray
{
size_t m_Size;
int *m_Numbers;
public:
NumberArray() { m_Size = 1; m_Numbers = new int[1]; m_Numbers[0] = 0; }
// . . . other methods for manipulating or constructing . . .
~NumberArray() { delete[] m_Numbers; }
// What if I had a method that concatenates two arrays?
NumberArray ConcatenateWith(const NumberArray &) const;
};
裏面這樣的方法人會期望創建NumberArray
類的未初始化的對象,然後「結構」基於一個新的對象在this
和參數中的對象?又名:
NumberArray NumberArray::ConcatenateWith(const NumberArray &other) const
{
// Mystery manner of creating an uninitialised NumberArray 'returnObject'.
returnObject.m_Size = m_Size + other.m_Size;
returnObject.m_Numbers = new int[returnObject.m_Size];
std::copy(m_Numbers, m_Numbers + m_Size, returnObject.m_Numbers);
std::copy(other.m_Numbers, other.m_Numbers + other.m_Size, returnObject.m_Numbers + m_Size);
return returnObject;
}
這樣做的最好方法是什麼?基本上,我不希望默認的構造函數創建一個大小爲1的數組,我將只刪除然後再分配一個新的數組。
我認爲你說出你的問題的方式表明你對對象及其構造有深刻的誤解。我建議閱讀更多的C++材料。 –
添加到Andy Prowl的評論中,我建議您閱讀Lippmann的「C++ Object Model」 –
@Aniket:請記住該書中的某些信息已過時/錯誤。可能會更好地堅持其他的東西。 – GManNickG