new/delete 与 malloc/free;struct 与class;inline

一、new/delete 与 malloc/free

1.new/delete是C++运算符,因而可以在编译期做额外的工作;malloc/free是C语言标准库函数。都用于内存申请和释放

2.new/delete可以自动执行构造函数和析构函数,而malloc/free不行,因为new/delete是面向对象的动态内存管理

3.malloc分配内存需要指定大小和返回类型转换,而new会自动计算需要分配的内存、自动进行类型转换


二、struct和class

struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
 

1.默认的继承访问权限不同,基类为struct的是public继承,基类为class的是private继承

2.成员的默认访问权限不同,struct是public,class是private

3.“class”这个关键字还用于定义模板参数,就像“typename”。


三、inline

inline是内联函数关键字,用来告诉编译器这个函数是内联函数,在编译期间内对这个函数直接展开,而不是在运行时进行调用,减少了函数调用的成本

1.关键字必须与函数定义放在一起才有效,放在声明前没有任何作用

2.定义在类内的成员函数自动成为内联函数

以下情况不宜使用内联:

(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。

(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地将构造函数和析构函数的定义体放在类声明中。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明了 inline 不应该出现在函数的声明中)。

虚函数为什么不能成为内联函数?

内联函数需要在编译期内就将函数展开,而虚函数需要在运行时才能知道所要调用的函数。


inline和#difine区别?

1.宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。

2.内联函数有参数检查,而difine没有

3.内联函数可作为成员函数,而difine不行



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值