Рассмотрим следующую программу:Можно ли создать объект внутри конструктора класса?
#include <iostream>
struct T
{
public:
T() : b(6)
{
T t=*this; // copy constructor
std::cout<<t;
}
int b;
friend std::ostream& operator<<(std::ostream&,const T& t);
}t;
std::ostream& operator<<(std::ostream& o,const T& t)
{
o<<t.b<<'\n';
return o;
}
int main() { }
выше программа выглядит странно для меня на самом деле. Можно ли создать объект класса внутри конструктора? Четко ли определено поведение этого кода?
Хотя технически обоснованно, это плохая идея. Пожалуйста, прочитайте: ** [Если вы используете этот указатель в конструкторе?] (Https://isocpp.org/wiki/faq/ctors#using-this-inctors) ** –
Объект не считается построенный до завершения конструктора. Я не уверен, что это использование '* this' верно –
@ M.M: почему http://ideone.com/BsIm3G эта программа приводит к ошибке выполнения. Когда я компилирую и запускаю его на моей локальной машине в g ++ 4.8.1, во время выполнения я получил сообщение об ошибке, которое test.exe перестало работать. Зачем? какова причина? – Destructor