构造函数与析构函数

1. 构造函数与析构函数的机制

构造函数,在对象被创建时调用;析构函数在对象被释放的时候调用。在创建类时,如果用户没有显示的定义构造函数/析构函数,编译器将会创建默认构造函数/析构函数。

2. 如何只创建静态变量(例如: A a),以及如何只创建动态变量(例如: A *a = new A)

如果用户定义静态变量(A a), 编译器将自动调用构造函数创建对象在栈上,编译器负责其的生命周期的管理,在变量离开作用域时,编译器自动调用析构函数释放内存。

如果只允许用户创建静态变量(A a),  只需将操作符new与delete定义为private成员即可,如下:

class A

{

private:

    void* operator new(size_t size);

    void operator delete(void* ptr);


如果用户定义动态变量(例如: A *a = new A),操作符new会在堆上申请内存空间,并调用构造函数对变量进行初始化,用户自行维护变量的生命周期,显式调用delete操作符释放内存。

如果只允许用户创建动态变量(例如: A *a = new A), 只需设置析构函数为private 即可,由于创建静态对象时,编译器要检查类中非静态函数(包括析构函数),如果析构函数是private,编译器将不能创建变量,编译器将会报错, 定义如下:

class A

{

private:

    ~A();


const 成员变量需要在构造函数的初始化列表中定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值