Этот код не работает во время выполнения в конструкторе копирования.
Но компилятор (MSVS2008) не выдает никаких предупреждений.Является самоинициализацией 'A a = a;' позволил?
Не могли бы вы объяснить (желательно со ссылкой на стандарт), является ли этот код незаконным или что?
Я понимаю, что A a = a; никогда не должен быть написан на первом месте, , но я ищу теоретический фон.
class A
{
public:
A()
:p(new int)
{
}
A(const A& rv)
{
p = new int(*rv.p);
}
~A()
{
delete p;
}
private:
int *p;
};
int main()
{
A a = a;
}
Как я понимаю из ответов, этот код является законным. Должен ли я добавить утверждение или если (& rv == this) p = NULL; здесь, чтобы быть в безопасности? Кто-нибудь справляется с этой проблемой в своем коде? – Yarik