目录
1.new运算符
1.1开批数组
2.delete运算符
3.malloc和new的区别
4.万能指针接收new对象
5.静态成员
6.静态成员函数
7. 单例
7.1概念
7.2常见场景
1.new运算符
C++中用new进行动态内存分配,new会在调用构造函数之前,成功进行内存分配,它带有内置的长度计算、类型转换、安全检查
1.1开批数组
int* pint=new int[10]; //pint为数组首地址delete[] pint;
注意:若delete后未加入[ ],可能释放失败,new创建数组时,会记录元素个数,delete会查找这个个数,但不加 [ ],就可能只释放一次,编译器不同结果不同
2.delete运算符
释放new出来的内存,先调用析构,然后释放内存。建议delete之后,再将指针置空。
3.malloc和new的区别
- ①malloc是C的库函数,new是C++创建堆区的运算符
- ②malloc对应free,new对应delete
- ③malloc返回值是void*,new返回创建对象的指针类型
- ④malloc不调用构造,free不调用析构,new调用构造,delete调用析构
- ⑤malloc会显式指出内存大小,new编译器会根据类型自行计算
4.万能指针接收new对象
该对象无法释放,因为是void类型的
5.静态成员
- 只有一份,它不属于某个对象,而属于某个类,被所有对象共享;
- 在编译阶段就分配空间,对象还未创建时,就已经分配好空间了;
- 类内声明,类外初始化;
- 可通过对象/类名进行访问;
- 静态成员也有访问权限。
class Person
{
public:static int m_A;
};//通过类访问
int Person::m_A = 100;//通过对象访问
Person p;
p.m_A = 200;
6.静态成员函数
- 只有一份,被所有对象共享;
- 只能访问静态成员变量,不能访问非静态成员变量;
- 可通过对象/类名进行访问;
- 静态成员函数也有访问权限。
7. 单例
7.1概念
- 只包含一个单例类;
- 一个类只有一个对象,且此对象可共享。
7.2常见场景
class ChairMan
{
public://单例static ChairMan* getInstance(){return man;}private://默认构造私有化ChairMan() {};//拷贝构造私有化ChairMan(const ChairMan& man) {};static ChairMan* man;
};ChairMan* ChairMan::man=new ChairMan;void test()
{ChairMan* c1 = ChairMan::getInstance();
}
实现步骤:
- 1.默认构造/拷贝构造函数私有化;
- 2.类内,声明私有的静态成员指针,类外,将指针初始化指向new出的对象;
- 3.将单例获取对象的接口写在public中。
注意:
因为单例模式被共享,释放对象的时机不确定,通常无需管理释放,程序结束系统会自动释放