关于新运营商的运营

时间:2011-05-05 08:56:00

标签: c++ constructor

如果我的Test类中有一个用户定义的默认构造函数,那么使用以下语句将完成哪些操作:

Test *test = new Test; //there is no () after new Test

首先,用户默认构造函数是否意味着“没有参数的构造函数”? 例如:

class Test {
     public:
             Test() {
              // do something here
             }
}

所以新的测试;表示编译器将在类Test()中调用Test()构造函数;并在其中执行操作,并在堆中为类Test对象分配内存?

那么*测试呢?它在堆或堆栈中的位置?有人能解释一下吗?

怎么样?
Test test = new Test();//with () this time

在这种情况下会调用什么样的构造函数?

4 个答案:

答案 0 :(得分:2)

“默认构造函数”表示可以在没有参数的情况下调用的构造函数。它可能有默认参数:

class Test {
public:
    Test(int x = 42); // Still default constructor. 
                      // Can be called as Test() and as Test(int);
};

new运算符将调用operator new来分配内存,并提供分配成功,然后调用一个或多个构造函数。在这种情况下,它将调用默认值来构造您的对象。

如果您的对象具有基类,则将调用多个构造函数。

在这种情况下,Test*本身test将驻留在堆栈上。

答案 1 :(得分:1)

默认构造函数是指可以在没有任何参数的情况下调用的构造函数,其中包含具有所有默认值的参数的构造函数。

语句Test *test = new Test为堆上的Test对象分配内存,并为其调用默认构造函数。

答案 2 :(得分:1)

用户默认构造函数是否意味着“没有参数的构造函数”?
是的,默认构造函数表示没有任何参数的构造函数。构造函数是一个特殊的&只有与该类同名的类的成员函数。
如果您的代码需要,编译器会生成一个默认构造函数(没有任何参数的构造函数)。

Test *test = new Test; 做什么?
它在size = size类的堆上分配内存,并调用默认构造函数Test()

* 那么测试呢?它在堆或堆栈中的位置?有人可以解释一下吗?
*testTeststack类型的指针变量,它指向动态分配的Heap上的类Test大小的内存块

答案 3 :(得分:0)

default constructor表示可以不带参数调用的构造函数。它用于初始化类的任何对象的参数,而不一定是指向该类对象的指针。所以,

Test t;

会调用默认构造函数Test::Test()。请注意,t是一个对象,而不是指向对象的指针。某些语言还具有默认构造函数,这些构造函数在未定义显式构造函数时自动生成,并在定义构造函数时被覆盖。

C ++中的new运算符将内存分配给堆中的指针,并使用构造函数对其进行初始化。

HTH,
斯利拉姆。