网站首页 > 基础教程 正文
对于刚接触C++的同学,定义一个类时需要小心编译器默认提供的成员函数,防止出现非预期的情况。
对于一个空类,
class Student {
}
等价于:
class Student {
public:
Student(); // 缺省构造函数
Student(const Student& stu); // 拷贝构造函数
~Student(); // 缺省析构函数
Student& operator=(const Student& stu); // 赋值运算符
Student* operator&(); // 取址运算符
const Student* operator&() const; // 取址运算符(const版本)
}
对于编译器自动生成的默认成员函数,需要注意以下几点:
- 如果类中没有显式定义构造函数,编译器会自动生成一个无参的构造函数;
- 一个类可以有多个构造函数,但有且只有一个析构函数;
- 析构函数没有参数,没有返回值,缺省的析构函数什么也不操作;
- 析构函数在对象生命周期结束后,编译器自动调用析构函数,完成对象的资源清理工作。因此,如果类中涉及资源的管理(有动态申请的内存),析构函数一定要显式给出;
- 拷贝构造函数只有单个形参,该形参是对本类类型对象的引用(且必须用const修饰),系统默认生成的拷贝构造函数为浅拷贝,若涉及资源管理的问题,一定要显示定义拷贝构造函数;
- 系统默认生成的赋值运算符,也是按照浅拷贝的方式进行赋值,因此若涉及资源管理的问题,一定要重载赋值运算符;
- 取址运算符通常不需要重载。
猜你喜欢
- 2024-10-12 全面剖析 C++ Boost 智能指针!| CSDN 博文精选
- 2024-10-12 C++设计模式——原型模式 设计模式之原型模式
- 2024-10-12 如何攻克 C++ 中复杂的类型转换? c++中四种类型转换的方式
- 2024-10-12 C++|由成员函数到运算符重载(类内、类外、友元方式重载)
- 2024-10-12 C++11新特性(49)- 用移动类对象代替拷贝类对象
- 2024-10-12 C++的23种设计模式(上篇-创建型模式)
- 2024-10-12 C++构造函数和析构函数详解 c语言构造函数和析构函数
- 2024-10-12 c++——默认成员函数 c++成员变量默认值
- 2024-10-12 C++|类中实现操作符重载,用操作符代替成员函数名
- 2024-10-12 C++之构造与析构 c++构造类
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)