考虑以下计划:
#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() { }
上述程序对我来说确实很奇怪。在构造函数中创建类的对象是否可以?这段代码的行为是否定义明确?
答案 0 :(得分:2)
是的,它定义明确。它将使用复制构造函数,当构造函数的主体结束时,对象将被销毁。
然而,我发现这段代码非常奇怪,我很难找到它的正确用法。
答案 1 :(得分:2)
只要你不小心递归地调用同一个构造函数,它就没问题了!通常在尝试实现链表时,我已经看到许多学生正是这样做的。