Это появилось недавно в классе, для которого я преподаватель. Мы преподавали студентам, как делать копии конструкторов в С++, а учащиеся, которые изначально преподавали Java, спросили, можете ли вы назвать один конструктор из другого. Я знаю, что ответа на это нет, поскольку они используют флаг педантичности для своего кода в классе, а старые стандарты не поддерживают этого. Я нашел на Stackoverflow и других сайтах предложение подделать это с помощью new (this)
, например, следующим образом
class MyClass
{
private:
int * storedValue;
public:
MyClass(int initialValue = 0)
{
storedValue = new int(initialValue);
}
~ MyClass()
{
delete storedValue;
}
MyClass(const MyClass &b)
{
new (this) MyClass(*(b.storedValue));
}
int value() {
return *storedValue;
}
};
Это действительно простой код и, очевидно, не сохраняет какой-либо код, повторно используя конструктор, но это, например, просто.
Мой вопрос в том, является ли это стандартным, и если есть какие-либо случаи ребер, которые следует учитывать, которые бы помешали этому быть звуковым кодом?
Изменить. Я должен отметить, что это кажется мне очень опасным, но это больше похоже на точку зрения. Я действительно не понимаю его больше, чем зная, как это может ухудшиться. Я просто хотел убедиться, что если спросить об этом ученики, я могу направить их к тому, почему это может или не должно делать. Я уже предложил им для всех практических целей использовать общий метод инициализации. Это скорее вопрос преподавания, чем практический проект.