首页 > 试题广场 >

下面的结果是?

[单选题]
#include<iostream>
using namespace std;
class TestClass{
	char x;
public:
	TestClass() { cout << 'A'; }
	TestClass(char c) { cout << c; }
	~TestClass() { cout << 'B'; }
};
int main() {
	TestClass p1, *p2;
	p2 = new TestClass('X');
	delete p2;
	return 0;
}
执行这个程序的结果是()
  • XB
  • AXBB
  • AAXB
  • AAXBBB
推荐
//类指针的声明,是不会调用构造函数的;但是指向一个类实例(new)就会调用构造函数。 
//但是类的声明,会调用默认构造函数。 
TestClass p1, *p2; //只为p1调用默认构造——A 
p2 = new TestClass('X'); //调用构造函数,由p2指向——X 
delete p2; //释放内存空间,p2所指实例调用析构函数——B 
return 0; //程序结束,p1调用析构——B
编辑于 2015-12-15 10:46:09 回复(5)
B
发表于 2015-11-18 14:46:31 回复(0)
类指针的声明不会调用构造函数,但指向一个类实例会调用构造函数。类的声明也会调用构造函数。
发表于 2016-08-01 10:15:52 回复(0)
这里把构造函数重载,所以p1执行的默认构造函数打印A,p2执行的是重载后的构造函数打印X,然后delete p2调用析构,主函数结束后再调用一次析构函数析构P1
发表于 2015-12-14 17:22:43 回复(2)
来自@Pandora
//类指针的声明,是不会调用构造函数的;但是指向一个类实例(new)就会调用构造函数。 
//但是类的声明,会调用默认构造函数。 
TestClass p1, *p2; //只为p1调用默认构造——A 
p2 = new TestClass('X'); //调用构造函数,由p2指向——X 
delete p2; //释放内存空间,p2所指实例调用析构函数——B 
return 0; //程序结束,p1调用析构——B
发表于 2017-07-07 21:23:09 回复(0)
我把代码复制运行了一下,在VS2013上结果输出的是AXB
发表于 2016-04-18 14:12:54 回复(4)

类指针的声明不会调用构造函数

发表于 2019-06-03 23:36:00 回复(0)
类指针声明不会调用构造函数
发表于 2023-09-03 14:47:45 回复(0)
嗯难
发表于 2021-12-24 17:09:05 回复(0)
类指针的声明不会调用构造函数,但是指向一个类实例就需要调用构造函数

发表于 2019-07-09 16:07:08 回复(0)
类的指针对象不会调用默认构造函数
发表于 2018-03-10 23:51:45 回复(0)
类指针的声明,不会调用构造函数,但是当它指向一个类的实例的时候就会调用构造函数了
发表于 2017-09-09 14:48:54 回复(0)