Ich habe in der neuen Move-Semantik von C++ 11 nachgelesen, und was mir nicht klar ist, ist, wenn ein benutzerdefinierter Konstruktor verhindert, dass der Compiler automatisch Bewegungssemantik zu Ihrer Klasse hinzufügt. Ich verstehe nicht, ob die Regel von 5 auch einfache Klassen wie die folgende enthält.verhindert die Implementierung eines Konstruktors die automatische Umzugsemantik?
Ich habe die folgende Klasse:
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);
};
Mit der letzten Zeile der Konstruktor ist. Erlaubt die Definition dieses Konstruktors, dass der Compiler die Klasse nicht durch Hinzufügen von Move-Konstruktoren optimiert?
Soll ich die Klasse stattdessen wie folgt deklarieren?
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);
};
Ja. Die Bereitstellung eines eigenen Konstruktors unterdrückt die Generierung der automatisch generierten Konstruktoren. –
@ πάνταῥεῖ Nein. Ein benutzerdefinierter Konstruktor verhindert nicht, dass ein Verschiebungskonstruktor generiert wird. – NathanOliver