Используя новый (это) конструкторам повторного использования

Это недавно подошло в классе, по которому я - обучающий помощник. Мы учили студентов, как сделать конструкторов копии в C++ и студентов, которым первоначально преподавали 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;
        }
};

Это - действительно простой код и очевидно не сохраняет кода путем многократного использования конструктора, но это просто, например.

Мой вопрос состоит в том, если это даже стандартно совместимый, и если существуют какие-либо пограничные случаи, которые нужно рассмотреть, который препятствовал бы тому, чтобы это было звуковым кодом?

Править: Я должен отметить, что это кажется очень опасным для меня, но это больше от точки наблюдения, я действительно не понимаю это больше, чем знание, как это может разложиться. Я просто хотел удостовериться, что, если спрошено об этом студентами, что я могу направить их к тому, почему банка или не должна делать этого. Я уже предложил им для всех практических целей использовать общий метод инициализации. Это - больше обучающего вопроса, чем для практического проекта.

19
задан Manoj Patil 23 August 2019 в 10:50
поделиться