strncpy const 构造函数 析构函数

来源:互联网 发布:新手编程 编辑:程序博客网 时间:2024/06/06 08:42

char *strncpy(char *s1, const char *s2, size_t n);

把字符串s2中的字符拷贝到字符串s1中,最多拷贝n个字符,返回s1的值

strncpy不一定拷贝其第二个参数的终止字符NULL,只有在被拷贝的字符个数至少比字符串长度大1才拷贝终止字符

char a[] = "welcome to library";

char b[10];

strncpy(b, a, 9);

b[9] = '\0';

在第三个参数小于或者等于第二个参数字符串长度的时候必须为第一个参数追加终止字符NULL

对于const对象而言显然它不能通过修改,所以在构造函数中使用赋值语句初始化是错误的

所有的数据成员都可以使用成员初始化器形式进行初始化,但是const数据成员和引用的数据成员必须使用成员初始化器进行初始化

成员初始化器出现在构造函数的参数列表和作为构造函数体开始到左花括号之间。

成员初始化器由数据成员名称后面紧跟着包含该成员初始化值的一对圆括号组成。

析构函数不接收任何参数,也不返回值。

“析构函数实际上并不释放对象的存储空间,它在系统收回对象的内存之前执行扫尾工作,使得内存可以重新用于存储新的对象”

因为不是计算机专业,所以书上这句话不是特别懂,“扫尾工作是什么工作?”

一个类有且仅有一个析构函数

不显式提供的话,编译器会生成一个“空的”析构函数

至于析构函数的执行顺序,与相应的构造函数的调用顺序相反,这个可能应该类似于堆栈吧,越早构造的越晚弹出,等彻底确定了再补充

析构函数是作用于对象嘛,所以对象的存储类别也可以改变析构函数的执行顺序(static global local)

因为离开对象的作用域时候,析构函数才会执行

所以正常情况下static和global对象在main函数结束才执行析构函数

当一个类A作为类B的成员时,

A a;

B b(b1, b2, a);

当B对象b撤销时,先执行B的析构函数再执行B中的成员A的析构函数

逻辑上好像也是合理的,因为对于B而言,B中的成员是先创建的,然后创建B,析构时候相反,大概可以这样理解

用VS2010 在析构函数里面写了输出语句测试,执行的时候在屏幕上总是一闪而过,没办法在屏幕上显示输出语句

看到有人提供了一种方法是main函数里面 又加了一个花括号(右括号是在system("pause")前面),

这样执行完花括号的时候就可以在屏幕上显示出析构函数里的语句了

但是这招对static和global变量不行,毕竟它们是在main函数结构才执行的

0 0
原创粉丝点击