メソッド内で、クラスから初期化されていないオブジェクトを作成できますか?
ここにいくつかのコンテキストがあります: コンストラクターがすべてメモリを割り当てるクラスを想像してください:
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;
};
このようなメソッド内では、 class の初期化されていないオブジェクトを作成し、次にパラメーター内のオブジェクトに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 の配列を作成したくありません。これを削除してから、とにかく新しい配列を再度割り当てます。