今日はMove Constructorsを学びました。この回答を読み、その中の移動コンストラクターの例を自分のコードに適用しようとしました。
class UnicodeString
{
public:
enum ENDIANNESS_TYPE {LITTLE_ENDIAN = 0, BIG_ENDIAN = 1} ENDIANNESS;
bool REPLACE_NON_ASCII_CHARACTERS;
char REPLACE_NON_ASCII_CHARACTERS_WITH;
float VECTOR_RESERVE_COEFFICIENT;
UnicodeString(UnicodeString && Other);
// ...
UnicodeString & operator=(UnicodeString Other);
// ...
private:
std::vector<UnicodeChar> UString;
// ...
}
UnicodeString::UnicodeString(UnicodeString && Other)
{
this->REPLACE_NON_ASCII_CHARACTERS = Other.REPLACE_NON_ASCII_CHARACTERS;
this->REPLACE_NON_ASCII_CHARACTERS_WITH = Other.REPLACE_NON_ASCII_CHARACTERS_WITH;
this->VECTOR_RESERVE_COEFFICIENT = Other.VECTOR_RESERVE_COEFFICIENT;
this->ENDIANNESS = Other.ENDIANNESS;
this->UString = ?????
}
UnicodeString & UnicodeString::operator=(UnicodeString Other)
{
std::swap(?????, ?????);
return *this;
}
ただし、その例とは異なり、私のクラスUnicodeString
には単純な C 配列が含まれているだけではありません。これには、std::vector<>
私が作成した別のクラスのインスタンスを要素とするオブジェクトが含まれています。
まず、move コンストラクターで、R-Value で渡された他のオブジェクトのベクターを盗むにはどうすればよいでしょうか。UString
次に、代入演算子でUString
、メインUnicodeString
オブジェクトの s の参照と R-Value によって渡される参照を効率的に交換するにはどうすればよいですか? はプライベート プロパティであるため、別のオブジェクトから直接アクセスできないことに注意してください。UString