首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 定位操作符new()的问题 [已结贴,结贴人:smilelance]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-03-22 17:36:15 楼主
    class   Screen   {
    public:
    void   *operator   new(   size_t   );
    void   *operator   new(   size_t,   Screen*   );
    //   ...
    };
    额外的参数可以被new   表达式中指定的定位实参初始化例如
    void   func(   Screen   *start   )   {
    Screen   *ps   =   new   (start)   Screen;
    //   ...
    }

    大家帮我看看这个什么意思:“new   (start)   Screen;
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • adlay
    • 等级:
    发表于:2007-03-22 17:39:251楼 得分:0
    没什么意思,   C++   语法就是这样规定的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • orc1984
    • 等级:
    发表于:2007-03-22 17:42:112楼 得分:0
    C++   语法呀   沒什麼意思   lz   看下教程呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-03-22 17:42:453楼 得分:1
    创建一个Screen   ,并把它放入从   start   (地址)   开始的一个大小为   sizeof(Screen)   大小的内存空间中.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-03-22 18:17:574楼 得分:19
    “new   (start)   Screen;”
    这是定位new操作

    Screen   *ps   =   new   (start)   Screen;
    表示在已经开辟好的内存区start中为堆对象Screen申请一个内存

    也就是说,如果start占100个字节
    你现在从它的第1个字节开始,往里面写入Screen

    这样做今后要释放内存的时候有麻烦,如果Screen里面有指针,并开辟了空间,那么delete   ps会调用析构函数,而start中的那块内存也丢失了,因为ps也指向了start.所以要避免这种情况,就要先ps-> ~Screen()这样显示的调用Screen的析构函数,再delete   []start
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-03-23 09:14:575楼 得分:0
    恩恩,楼上讲得和c++   primer上差不过,不过被你这么一整理我才明白,看起来自学还是没有高手带得快啊,哈哈,好的,楼上的GG,分数给你了哦,非常感谢啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-03-26 11:50:006楼 得分:0
    呵呵,一起学习!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved