读书人

new abc() 跟 abc a = new() 的区别

发布时间: 2013-04-05 10:24:33 作者: rapoo

new abc() 和 abc a = new() 的区别
1 new abc()是创建个临时对象吗?

2 如果abc类是个窗体类 abc a = new() 后面需要 a.showwindow() 那用 new abc()时该怎么写showwindow()函数?
是在abc的构造函数中写吗?

3 这两种方法各自的优势是什么,一般用在什么地方?


[解决办法]
ColorSkinWindow类应该是重载了new操作符,否则上面的内存泄漏怎么解决?
是不是要保存一个临时变量,是要看代码要求的,比如你要操作:
a->b->c->d->e;

那你是不是觉得这样:
E e = a->b->c->d->e;
e->...
更好一点呢?
[解决办法]
1.不是临时对象,是堆上的
2.(new abc())->ShowWindow(SW_SHOW),但构造函数里一定要Create否则无法显示
3.第一种方法比较罕见,正常情况下恐怕没人推荐,虽然我们的项目里有些地方用到这种方法了;第二种常见
[解决办法]
1.第一个叫无名对象,堆上面的,跟NEW在一起混的都这样,有用的,有时候入参什么的就这么用。
2.指针就这么new,对象实体初始化不用这么复杂abc a;就已经初始化了
3.看你怎么用了,new的生命周期都要自己控制的,不然就内存泄漏。实体会根据其位置来对应上生命周期。自动释放(主要会自动调用析构函数)
[解决办法]
1 是生成一个临时对象,并在这行代码执行完后释放,常用在输入参数
2 是生成一个局部对象,在离开作用范围时释放

读书人网 >VC/MFC

热点推荐