【发布时间】:2013-05-04 01:34:47
【问题描述】:
我今天学习了Move Constructors。我阅读了this answer,并尝试将其中的移动构造函数示例应用到我的代码中。
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向量?
其次,在赋值运算符中,我如何有效地交换主UnicodeString对象的UStrings的引用和R-Value传递的引用? 注意。UString 是私有属性,因此不能直接从其他对象访问
【问题讨论】:
-
UnicodeStrings 应该能够看到彼此UStrings 无论是否是private。访问说明符适用于其他客户。
标签: c++ class c++11 assignment-operator move-constructor