c ++用构造函数或wothout创建一个对象?

时间:2016-02-29 10:10:14

标签: c++

我是c ++的新手。 我见过一些类的例子。 当我创建一个对象并且不必使用consructor创建它时,我很难理解何时必须调用costuctor(whith())。

4 个答案:

答案 0 :(得分:2)

在创建C ++对象(类类型)时,始终会调用构造函数。你不能改变它。

假设您有一个默认构造函数(在()之间不接受任何参数的构造函数),那么它将被调用一些简单的东西

  YourClass x;

在这种情况下,使用()创建对象实际上是一个非常糟糕的主意,因为

  YourClass thing();

编译器将此解释为名为thing()的函数的声明,该函数不接受任何参数,并返回类型YourClass的值。如果像普通对象实例一样使用thing,那通常会导致编译错误。

答案 1 :(得分:1)

如果创建了一个对象,则始终会调用其中一个构造函数。

Foo x;
Foo x{};

以上所有语句都会这样做,使用默认构造函数创建一个Foo对象。请注意,Foo x();在此上下文中无效,请参阅Peter的回答以解释原因。

如果必须将参数传递给构造函数,或者必须使用 new ,则必须使用括号:

Foo y(42, true);
Foo y{21, false};
Foo* y = new Foo();
Foo* y = new Foo(2, false);

答案 2 :(得分:0)

构造函数在创建对象时总是被调用,它可以隐式调用。

class SomeClass
{
    SomeClass() {}
};

SomeClass myObject; // in fact it a: SomeClass myObject = SomeClass();

答案 3 :(得分:0)

如果创建Object,则始终调用构造函数。要么使用圆括号,要么(使用新标准)可以使用花括号。如果你想调用没有参数的构造函数,你可以省略括号,但你仍然会调用构造函数。

不调用构造函数的唯一可能性是使用指针,因为指针只保存对象的内存地址。要实际创建一个对象,您需要使用new(再次调用构造函数),但如果已经有一个想要指向的对象,则可以在以后完成或者完全跳过。 对于内置类型,您还可以跳过“构造函数”,这会导致单元化变量。

如果你调用的构造函数是你自己定义的构造函数,或者编译器隐式定义的构造函数是另一个问题,那么......