课时12构造函数与析构函数-2
构造函数
构造函数可以有多个
构造函数可以重载
构造函数用于隐式类型转换
class Student { public: explicit Student(int ssID) :id_(ssID) { std::cout << "constructing student:" << ssID << std::endl; } private: int id_; }; void func(Student& stu) { }
课时15动态内存分配-1
动态内存分配
C语言的动态分配
malloc/free函数
内存区域
全局变量、静态数据、常量->data area
所有类成员函数和非成员函数代码->code area
为运行函数而分配的局部变量、函数参数、返回数据、返回地址等->stack area
动态内存分配区->heap area
课时18拷贝构造函数-2
拷贝构造函数
何时需要定义拷贝构造函数
类数据成员有指针
泪数据成员管理资源(如打开一个文件)
如果一个类需要析构函数来释放资源,则它也需要一个拷贝构造函数
如果想禁止一个类的拷贝函数,需要将拷贝函数声明为private
课时19const关键字
const关键字
C++提供了const限定符
指定一个不该被改动的对象
const限定指针类型
const出现在星号左边,表示被指物是常量
const出现在星号右边,表示指针自身是常量
const数据成员必须使用成员初始化列表进行初始化
课时21案例讲解--单例设计模式
案例讲解
单例设计模式
案例介绍
保证在应用程序中,一个类只有一个对象
案例设计
将构造函数设置为私有,在类的实现中确保生成对象的个数
头文件singleton.h
源文件singleton.cpp,main.cpp
头文件singleton.h
#pragma once #include <iostream> class Singleton { public: static Singleton* getInstance(); void doSomething(); void destroy(); private: Singleton(); ~Singleton(); Singleton(const Singleton&); Singleton& operator=(const Singleton&); static Singleton* instance; };
源文件singleton.cpp
#include "singleton.h" Singleton* Singleton::instance = NULL; Singleton::Singleton() { std::cout << "Singleton instance" << std::endl; } Singleton::~Singleton() { } void Singleton::destroy() { delete this; instance = NULL; } Singleton* Singleton::getInstance() { Singleton* ret = instance; if (ret == NULL) { instance = new Singleton(); ret = instance; } return ret; } void Singleton::doSomething() { std::cout << __func__ << ", " << __LINE__ << std::endl; }
源文件main.cpp
#include "singleton.h" int main() { Singleton::getInstance()->doSomething(); system("pause"); return 0; }
课时22案例讲解--valgrind内存检测工具
Linux安装valgrind命令
sudo apt-get install valgrind
检查valgrind
which valgrind