在类的构造函数中创建对象是否有效?

时间:2015-11-10 16:39:32

标签: c++ object constructor

考虑以下计划:

#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() { }

上述程序对我来说确实很奇怪。在构造函数中创建类的对象是否可以?这段代码的行为是否定义明确?

2 个答案:

答案 0 :(得分:2)

是的,它定义明确。它将使用复制构造函数,当构造函数的主体结束时,对象将被销毁。

然而,我发现这段代码非常奇怪,我很难找到它的正确用法。

答案 1 :(得分:2)

只要你不小心递归地调用同一个构造函数,它就没问题了!通常在尝试实现链表时,我已经看到许多学生正是这样做的。