我一直在閱讀C++ 11的新移動語義,以及我不清楚的是,如果使用自定義構造函數會阻止編譯器自動將移動語義添加到您的類中。我不明白5的規則是否也包括如下的簡單類。實現構造函數是否阻止自動移動語義?
我有下面的類:
class CodeFile
{
private:
std::vector<Function> functions;
//std::vector<std::wstring, unsigned long> variables;
std::vector<std::wstring> lines;
std::vector<unsigned char> constants;
public:
std::wstring directory;
std::wstring fileName;
void setFilePath(std::wstring filePath);
bool addFunction(Function function);
void Run();
void Finalize();
CodeFile(std::wstring filePath);
};
隨着最後一行是構造函數。定義這個構造函數是否會阻止編譯器通過添加移動構造函數來優化類?
我應該聲明類如下嗎?
class CodeFile
{
private:
std::vector<Function> functions;
//std::vector<std::wstring, unsigned long> variables;
std::vector<std::wstring> lines;
std::vector<unsigned char> constants;
public:
std::wstring directory;
std::wstring fileName;
void setFilePath(std::wstring filePath);
bool addFunction(Function function);
void Run();
void Finalize();
static CodeFile fromFile(std::wstring filePath);
};
是。提供自己的構造函數將會抑制自動生成的構造函數的生成。 –
@πάνταῥεῖ編號用戶定義的構造函數不會停止生成移動構造函數 – NathanOliver