一、内存完美开辟
(1)栈和堆的本质区别
**前引:**在 C++ 编程中,内存管理是程序稳定性与性能的基石。栈与堆作为内存分配的两大核心区域,其开辟方式直接决定了变量的生命周期、访问效率及内存安全。
| 特性 | 栈(Stack) | 堆(Heap) |
|---|---|---|
| 分配方式 | 编译器自动分配 / 释放 | 程序员手动分配(new)/ 释放(delete) |
| 生命周期 | 随作用域结束而销毁 | 随 delete 调用而销毁 |
| 大小限制 | 通常较小 | 较大 |
| 速度 | 极快 | 较慢 |
| 使用场景 | 局部变量、函数参数等短期变量 | 动态大小的数据 |
(2)如何只在栈上开辟空间
栈上开辟不需要手动调用 malloc、new 申请动态内存,周期一般在该函数调用结束时自动销毁。
我们知道动态开辟(如 C++ 的 new)是调用 operator new 开辟堆空间的。若要在栈上开辟空间,可禁用 operator new:
template<class T> class StackOnly {
public:
StackOnly() { }
private:
// 将 operator new 设为私有,禁止堆分配
void* operator new(size_t size);
void operator delete(void* ptr);
};





