C++中New存在的意义

 

最近研究C++的new,发现,存在真是必有其道理的。

Thinking IN C++中说:

若C++中没有引入new来动态分配空间的话,一个对象的初始化,必须要这样实现

//: C13:MallocClass.cpp
// Malloc with class objects
// What you'd have to do if not for "new"
#include <cstdlib> // malloc() & free()
#include <cstring> // memset()
#include <iostream>
using namespace std;
class Obj {
int i, j, k;
enum { sz = 100 };
char buf[sz];
public:
void initialize() { // Can't use constructor
   cout << "initializing Obj" << endl;
   i = j = k = 0;
   memset(buf, 0, sz);
}
   void destroy() const { // Can't use destructor
    cout << "destroying Obj" << endl;
}
};
int main() {
printf("%d",sizeof(Obj));
Obj* obj = (Obj*)malloc(sizeof(Obj));
obj->initialize();
// ... sometime later:
obj->destroy();
free(obj);
} ///:~

这里必须:
1、手动调用malloc分配空间
2、必须强制转换成所对应的类的类型
3、手动调用obj->initialize()来初始化对象
所以,当任意一步忘记了的时候,当你对创建的对象执行操作的时候,就很有可能会出错。也许我写的比

较轻松,不信,你试试看。。

 

 

 

此时,王者登场:new应运而生。
C++中引入new关键字的目的就是为了简化这些繁琐的步骤从而避免程序漏洞
假如执行下面的表达式:
MyType * fp = new MyType(1,2);
在运行时等价于调用malloc(sizeof(MyType)),然后返回的地址就作为This指针来调用MyType的参数为

(1,2)的构造函数。在指针被赋予fp之前,这个对象是活的,已初始化的对象,但是,在这之前,你都不能

够处理它。而且,此时也保证了返回的指针类型为MyType型,所以,任何的强制转换都是多余的。

注意到,此时,在heap上创建对象的过程变得多么简单,就仅仅是一句简单的表达式。但是,这其中安全

保证所需要的所有工作:内存长度计算,类型转换,安全检查都已经完成了。

突然间,世界又重归简洁和美好了!~

时间不早了,洗洗睡了……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值