如果我的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
在这种情况下会调用什么样的构造函数?
答案 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()
。
* 那么测试呢?它在堆或堆栈中的位置?有人可以解释一下吗?
*test
是Test
上stack
类型的指针变量,它指向动态分配的Heap
上的类Test大小的内存块
答案 3 :(得分:0)
default constructor
表示可以不带参数调用的构造函数。它用于初始化类的任何对象的参数,而不一定是指向该类对象的指针。所以,
Test t;
会调用默认构造函数Test::Test()
。请注意,t
是一个对象,而不是指向对象的指针。某些语言还具有默认构造函数,这些构造函数在未定义显式构造函数时自动生成,并在定义构造函数时被覆盖。
C ++中的new
运算符将内存分配给堆中的指针,并使用构造函数对其进行初始化。
HTH,
斯利拉姆。