类的python 类 析构函数数可以带有几个参数

以下试题来自:
单项选择题(
)是析构函数的特征。A.一个类中只能定义一个析构函数B.析构函数名与类名不同C.析构函数的定义只能在类体内D.析构函数可以有一个或多个参数
为您推荐的考试题库
你可能感兴趣的试题
1A.MyCmvalue=10;B.MyC*malue=10;C.MyCm*value=10;D.MyClass my(10);2A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数3A.{x=y+z;}B.for(i=1;k<0;i++)
if(i%3==1)
cout<<i<<endl;C.while(i<10){cout<<i<<i++;}D.if(i<10){i=i+1;}4A.“cout'’是一个输出流对象B.“endl”的作用是输出回车换行C.“x”是一个变量D.“<<”称作提取运算符
热门相关试卷
最新相关试卷2、构造函数可以有参数,但不可以有返回值。 3、一个类可以有多个构造函数,也可以有多个析构函数。 4、对一个类中数据成员的初始化可以通过构造函数中的参数...
C++_构造与析构函数知识详细讲解(有实例)_理学_高等教育_教育专区。C++_构造与...? 析构函数名是在类名前面加上符号“~”,析构函数没有参数 和返回值。 ...
C#中构造函数和析构函数的用法 C#中构造函数和析构函数的用法作者:分享吧 阅读...一个是没有参数的 Poi nt 构造函数和一个是有两个 double 参数的 Point ...
VC++构造函数与析构函数_数学_自然科学_专业资料。构造函数和析构函数 1 构造...了没有参数的构造函数,或 各参数均有缺省值的构造函数也称为缺省的构造 函数,...
析构函数与类名相同,在函数名前要加~符号 2. 析构函数没有参数,也不能重载,一个类中只能定义一个析构函数 3. 不能指定返回类型 4. 析构函数自动调用,不...
( √ ) 52. .如果一个函数没有返回值,定义时函数头前需用 void。 ( √ ...A. 一个类可以有多个析构函数 C. 析构函数不能指定返回类型 个参数 12....
(析构函数的内 容我们后面将要介绍) 如果需要调用能够执行就需要再添加一个没有参数的构造函数 对上面的代码改造如下: #include &iostream&...
用户定义的没有参数的构造函数; (3)用户定义的所有参数都有缺省值的构造函数。...4. 构造函数与析构函数的调用过程 在创建对象时,调用构造函数;在撤消对象时,...
构造函数和析构函数 C++初始化机制 构造函数及其适用范围 析构函数及实例化 ...当类中没有带参数的构造函数时,编译器 自动调用默认构造函数。实现方式:只要在...
A、不允许设置缺省参数值; B、在指定了缺省值的参数右边,不能出现没有指定...A、析构函数可以有一个或多个参数; B、析构函数名与类名不同; C、析构...类的构造函数和析构函数_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
类的构造函数和析构函数
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢在网上看人写了这么一段代码:
std::cout&&"call A constructor"&&std::
std::cout&&"call A destructor"&&std::
void* operator new(size_t size)
std::cout&&"call A::operator new[] size:"&&size&&std::
return malloc(size);
void operator delete[](void* p)
std::cout&&"call A::operator delete[]"&&std::
void operator delete(void* p)
28 };#include &iostream&
#include "A.h"
30 void* operator new[](size_t size)
std::cout&&"call global new[] size: "&&size&&std::
return malloc(size);
36 void operator delete[](void* p)
std::cout&&"call global delete[] "&&std::
40 int _tmain(int argc, _TCHAR* argv[])
std::cout&&"sizeof A "&&sizeof(A)&&std::
A* p1 = new A[3];
delete []p1;
system("pause");
如果定义了析构函数的话:operator new[]会输出:
call global new[] size:7
否则输出:
call global new[] size:3
1. 有析构函数为什么会多4字节这多出来的空间是为了记录数组的长度以及内存对齐的。我们来看看里的表述。
这里提到了delete并不知道数组长度是多少。这个职责由new[]完成。标准库中new[]的实现一般是先申请一块sizeof(T) * n + x的空间,使用最初的空间记录数组长度,从下一个对齐了的地址开始才是对象数组实际使用的空间。这点可以以下通过简单修改程序观测到。构造函数中打印this指针,new[]函数中先记录malloc的值,打印并返回。多出来的这个x空间具体是多少呢,这个C++标准并没有严格定义,只是给出一些条件。
大意是最终应该保证对象实际所占用的空间必须符合当前平台的内存对齐要求。对于x86来说是4字节对齐,即指针作为一个整数必须能被4整除。对于x64来说是8字节对齐。结合上面那段new[]应该负责记录数组长度这一规定,可以得出如下规则。1. 由new[]返回的空间中最初空间用于长度记录,答主实测VC上使用的是4字节int。2. 依据内存对齐要求补齐空间。3. 对象数组实际占用的空间。整体情况就是这样: [size][pad][array]如何检测我们的结论?在主函数中new和delete之间加入如下代码:
size_t mask = sizeof(void*) - 1;
size_t p2 = reinterpret_cast&size_t&(p1 - 1);
p2 = p2 & ~
std::cout && *reinterpret_cast&int*&(p2) && std::
就可以得到数组的大小。
2. 没有析构函数时候的情况在1中我们提到new[]申请的空间可以大于数组实际所需空间,以记录数组长度,但在缺少有效析构函数(non-trivial destructor,非标准中译)的情况下delete仅仅将这一块连续的内存空间释放就可以了,所以无需记录数组长度,这时new[]申请的空间可以等于数组实际所需的空间。关于有效析构函数
简单说就是自身及其非静态成员(包括继承的)都必须没有定义或删除了析构函数。申请这样对象的数组时一般不会使用额外空间去记录其长度。
阅读(...) 评论()

我要回帖

更多关于 析构函数有参数吗 的文章

 

随机推荐