免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1159 | 回复: 3
打印 上一主题 下一主题

new的重载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-08 08:15 |只看该作者 |倒序浏览
#include <cstddef>;
#include <iostream>;
using namespace std;
class X{
    int i;
    public:
        X(int ii):i(ii){
            cout<<"this="<<this<<endl;
        }   
        ~X(){
            cout<<"X::~X "<<this<<endl;
        }
        void* operator new(size_t ,void* loc )
        { return loc;
        }
    };
    int main()
    {int l[10];//这个数组是不是分配栈上?
     cout<<"l="<<l<<endl;
     X* x=new(l) X(47);
     x->;X::~X();//不执行这个语句有问题吗?这个语句去掉后仍能正常运行。
}

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-03-08 09:46 |只看该作者

new的重载

这个数组当然是在栈上.
你这叫做placement new.不是单纯的new.
你不能手动执行dtor,你必需不执行它.因为你new来的内存是数组在栈上由系统分配的.所以在程序结束时系统会收回内存,而你手动析构的话就会造成运行时(或者不定义)行为.因为你不是通过new得到的内存就不能自己去析构它.

论坛徽章:
0
3 [报告]
发表于 2005-03-08 13:58 |只看该作者

new的重载

这是c++编程思想中的例子,肯定是对的。若不手动执行析构函数,析构函数不会被调用。但内存还是由系统自动回收的。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-03-08 15:56 |只看该作者

new的重载

嗯,我错了的.想到是delete去了.析构是要做的.但一般不会去显示调用析构函数的.只有在用placement new时才这样做.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP