C++中的延迟构造函数

2 c++ constructor default

我一直在审查一些看起来像这样的代码:

class A; // defined somewhere else, has both default constructor and A(int _int) defined
class B
{
public:
    B(); // empty
    A a;
};

int main()
{
     B* b;
     b = new B();
     b->a(myInt); // here, calling the A(int _int) constructor,
     //but default constructor should already have been called
}
Run Code Online (Sandbox Code Playgroud)

这有用吗?在调用默认值后调用特定的构造函数?

jal*_*alf 15

该代码不会调用构造函数.它叫A::operator()(int).

但是如果你在一个已经构造的对象上显式调用构造函数,那么你就可以很好地进入未定义的行为.它似乎在实践中起作用,但不能保证它会按预期执行.

  • @Richard:我不确定你得到了什么.如果未声明该函数,则代码将无法编译.因此,假设代码*执行*编译,这意味着必须定义运算符.没有含糊之处.使用的语法可以*永远*调用构造函数,如果这是你得到的.要做到这一点,你必须改为写b-> a :: A(myInt).Rich的问题中显示的语法只能*调用operator(). (2认同)