C++堆,栈,静态成员及使用准则
1. 堆(Heap)与栈(Stack)对象区分
栈对象:
- 语法:
ClassName obj;
- 自动管理生命周期
- 作用域结束时自动销毁
- 访问速度快
堆对象:
- 语法:
ClassName* obj = new ClassName();
- 必须手动
delete
- 生命周期由程序员控制
- 适合大对象或需要长期存在的对象
判断依据:
- 使用
new
→ 堆对象 - 直接声明 → 栈对象
- 智能指针 → 管理的堆对象
2. 静态(static)成员使用场景
静态变量:
- 类级别共享数据:
static int count;
- 常量配置:
static const string PATH;
- 单例模式实现
静态方法:
- 不依赖实例的工具方法:
static double calculate();
- 工厂方法:
static Product* create();
- 操作静态成员的方法
3. C++17改进特性
内联静态变量:
inline static const string NAME = "value"; // 头文件中一次完成
- 无需类外定义
- 适合头文件库开发
线程安全静态局部变量:
static auto& instance() {
static MyClass inst; // C++11起线程安全
return inst;
}
- 保证多线程安全初始化
- 单例模式推荐实现
4. 现代C++最佳实践
- 优先使用栈对象
- 必须使用堆对象时:
- 优先用智能指针(
unique_ptr
,shared_ptr
) - 避免裸指针
- 优先用智能指针(
- 静态成员:
- 类常量使用
inline static const
- 单例使用线程安全静态局部变量
- 类常量使用
- 减少全局状态,增强可测试性