| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 442 人关注过本帖
标题:Auto_ptr以及模版的问题
只看楼主 加入收藏
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
结帖率:33.33%
收藏
 问题点数:0 回复次数:7 
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
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
std::auto_ptr<Trace>的构造函数参数要求是 Trace* 类型,你给个 void* 当然会编译不通过啦

如果不加限制,岂不是 auto_ptr<Trace> mine( new double );也可以编译通过?
2012-11-19 08:49
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
operator new 里面返回的不是void*类型吗?请求指点
哥们,operator new返回void *只是在你定义的类中的new操作符重载,而你要给智能指针赋值必须是一个指针
而且是一个指向你定义的类的对象的指针,但是你的类还没有实例化,怎么可能使用里面的函数,要理清思路
这个new还是正常的new 是先申请空间然后调用类的构造函数。还不是你自己重载的那个new操作符,那个只是在你的类有效范围内使用有效

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2012-11-19 15:20
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
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
先分配空间,然后调用构造函数,最后返回,返回值那里也肯定加了static_cast,不然你觉得C++会允许把void*赋值给某一确定类型的指针吗?

My life is brilliant
2012-11-26 10:48
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.017520 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved