2011-02-08 55 views
16

以下哪个是myClass的构造函数?何时调用构造函数?

1. myClass class1; 
2. myClass* class1; 
3. myClass* class1 = new myClass; 

非常感谢

+5

这是否需要功课标签? – user535617 2011-02-08 15:11:11

+5

@ user535617 - 或面试问题标签... – 2011-02-08 15:12:16

回答

29
  1. 是 - 默认的构造函数,例如在堆栈中创建
  2. 没有
  3. 是 - 默认的构造函数,例如在堆上创建
1

1和3 ,因为在他们你创建一个myClass对象。

1

当实例化类时,将在情况1和3中调用构造函数。另一个(2)只声明一个指针。

4

在#1和#3中,因为您实际上正在制作对象的实例。在#2中,你只是声明了一个不指向实例的指针。

4
  1. 该语句会在堆栈中创建一个对象,并调用c'tor。
  2. 仅定义堆栈上的指针变量,不调用构造函数。
  3. 新运算符将在免费商店(通常是堆)中创建一个对象并调用c'tor。

但是这段代码不会实例化任何对象,因为它不会编译。 ;-)尝试这一个:

myClass class1; 
myClass* class2; 
myClass* class3 = new myClass; 
  • 类1是一个局部变量(在栈上),构造函数调用。
  • 类2是一个指针,没有构造函数调用。
  • 类3是一个指针,当执行new时调用构造函数。
相关问题