C++内存分配

来源:互联网 发布:恒腾网络 福利待遇 编辑:程序博客网 时间:2024/04/30 08:03

存储空间管理是 C++ 中的重要内容。很多错误也都和内存管理有关。

std::cout << "This is a string" << std::endl;

静态内存分配 (static)

所谓静态(static),是说在编译的时候已经将内存分配好了。

每个程序都有一个对应的数据区。编译器把静态变量就存放在这个数据区中的固定位置。因而静态数据的存储地址在程序运行过程中是固定不变的。除了用 "static" 显示声明的变量,常量字符串(比如上面例子中的 "This is a string")也可以看作是匿名的静态变量。

TODO

动态内存分配

new

new 在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。

常见的形式如 new Object();。

有时我们会看到下面”奇怪“的用法

class A;
A a, b;
new (&a) b;
// 相当于 a->A::A(b);

上面的用法其实是省略了空间分配的步骤,在指定地址上通过拷贝构造函数初始化一个对象。

delete

delete 负责释放 new 分配的内存。