Вот простой пример:Одна переменная декларация создает несколько экземпляров
class A {
public:
A() {
printf("%p C1\n", this);
}
A(const char* p) {
printf("%p C2\n", this);
}
};
int main(int argc, char *argv[]) {
A a;
a = "abc";
}
В коде, хотя A
объявлен только один раз, есть два экземпляра A
получения созданные. Конструктор вызывается дважды. Я мог бы воспроизвести это на VS 2013, а также на gnu C++.
Удовлетворение является ли это ошибкой или частью спецификации.
Вы можете избежать временной путем определения 'А оператор :: = (Const символ *)' (или лучше 'A :: operator = (std :: string const &)'). – Walter
'Удивление, если это поведение является ошибкой. Вы использовали два компилятора, используемые тысячами людей и компаний по всему миру, и получили те же результаты от такого тривиального кода. Учитывая, что это может быть ошибка? – PaulMcKenzie
@MatthewMoss Мой вопрос в конце моего комментария был действительно предназначен для саркастичности. Программа представляет собой игрушечную программу, g ++ и Visual Studio используются тысячами людей. Если бы это было ошибкой, это было бы сообщено по всей сети (добавьте, что вероятность того, что два независимых поставщика компилятора будут производить ту же ошибку с такой смехотворно простой программой). – PaulMcKenzie