| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 442 人关注过本帖
标题:Auto_ptr以及模版的问题
取消只看楼主 加入收藏
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
结帖率:33.33%
收藏
 问题点数:0 回复次数:4 
Auto_ptr以及模版的问题
class Trace{
 void *operator new(size_t sz){
    void *p=::operator new(sz);
    return p;
 }
};
auto_ptr<Trace> mine(new Trace);
mine(这里为什么可以填写且一定要填new Trace(...))
或者换种写法
Trace * p=new Trace;
auto_ptr<Trace>mine(p);
程序通过,但是
void* p=new Trace;
auto_ptr<Trace>mine(p);
出错!!
为什么
operator new 里面返回的不是void*类型吗?请求指点
搜索更多相关主题的帖子: void return mine 
2012-11-18 16:30
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:0 
没人懂嘛?

相互帮助

2012-11-18 19:54
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:0 
以下是引用liufashuai在2012-11-19 15:20:25的发言:

哥们,operator new返回void *只是在你定义的类中的new操作符重载,而你要给智能指针赋值必须是一个指针
而且是一个指向你定义的类的对象的指针,但是你的类还没有实例化,怎么可能使用里面的函数,要理清思路
这个new还是正常的new 是先申请空间然后调用类的构造函数。还不是你自己重载的那个new操作符,那个只是在你的类有效范围内使用有效
new运算符的操作顺序是不是这样:编译器首先检查到new,发现后面跟着Trace类型,算出Trace类的大小传递给(已经重载的)new运算符(函数),调用完成后开辟一个内存单元并返回它,再调用Trace()构造函数?
    new Trace   这个表达式得到的是一个Trace*类型吗?

相互帮助

2012-11-24 12:44
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:0 
来人说下 new的执行过程啊,是不是我想的这样

相互帮助

2012-11-25 16:35
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:0 
回复 7楼 lz1091914999
By the way,static functions 是属于类的,为什么new 和delete 是static 的  

相互帮助

2012-12-04 19:50
快速回复:Auto_ptr以及模版的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025943 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved