【C++内存管理】

类和对象

static成员

用static修饰的函数成为静态成员变量静态成员变量要在类外初始化
静态成员变量为全体类对象共享,不在对象中,存放在静态区
用static修饰的函数称为静态成员函数,没有this指针
静态成员函数可以访问其他静态成员,但是不能访问非静态的,因为没有this指针

构造函数调用顺序先全局再按顺序

析构函数调用顺序先局部(后构造的先析构)再静态,最后全局

内部类

一个类定义在类里面
和定义在全局没什么区别,只是受类域和访问的限制
内部类默认是外部类的友缘(内部可以访问外部)

class A
{
private:
static int k;
int h=1;
pubic:
class B
{
}
...
}

匿名对象

A aa1;
A aa2(2);//有名对象
A();
A(1);//匿名对象

匿名对象的生命周期只有一行
const引用会延长生命周期,跟着const走

const A& ref2=A();
void func(const A& aa=A())//匿名对象做缺省参数
{
...
}

对象拷贝时编译器的优化


int main()
{
A aa1=1;//拷贝+构造,优化为直接构造
A aa2(1);//直接构造
}

有些编译器会把拷贝构造优化为直接构造(vs2022release/debug)

内存管理

【C++内存管理】_第1张图片

函数里面声明的局部变量,数组存在栈里面

开辟的空间在堆里面

静态区

const/static静态存在静态区
全局变量也存在静态区

常量区

指针所指向的内容存在常量区

你可能感兴趣的:(c++,c++,开发语言)