简单的语法问题

unionsoft 2003-10-20 02:49:45
请问下面这句怎么解释?

explicit auto_ptr(_Ty *_P = 0) _THROW0()
: _Owns(_P != 0), _Ptr(_P) {}
...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
unionsoft 2003-10-20
  • 打赏
  • 举报
回复
我得到了一个,但有点不明白的地方
template <class T>
class SmartPtr :public CObject
{
public:
explicit SmartPtr(T* pointee){pointee_=pointee;}
~SmartPtr()
{
if(pointee_)
{
delete [] pointee_;
}
}

operator T*()
{
return pointee_;
}


private:
T* pointee_;
};

然后可以如下应用:
SmartPtr <long> p(new long[100]);
p[0]=10; //关键要象数组一样的引用
p[99]=100;
long i1=p[0];
long i2=p[99];


我不明白的地方是该模板没有对操作符"[]"重载,为什么可以有“p[0]=10;”这样的应用呢????
qwedcxza 2003-10-20
  • 打赏
  • 举报
回复
这个问题太广了,你应该看看书,再决定有什么疑难之处来问
这里恐怕大家都没有时间写这些代码
unionsoft 2003-10-20
  • 打赏
  • 举报
回复
多谢指教,另外我还有个问题:
我想用一个模板来动态分配内存,这样就可以自动释放内存了,要求实现如下功能:

MyTemplate<long> p(new long[100]);
p[0]=10; //关键要象数组一样的引用
p[99]=100;
long i1=p[0];
long i2=p[99];

请教这个MyTemplate如何定义?
qwedcxza 2003-10-20
  • 打赏
  • 举报
回复
解释为
若 _P != 0 , _Owns = TRUE
反之 _Owns = FALSE

任何类型均有自己的初始化过程,例如 _Owns = bool( true ) 和 _Owns( true ) 都是将变量初始化成 true

因此 _Owns( _P != 0 ) 相当于用 _P != 0 这个表达式的值来初始化 _Owns
unionsoft 2003-10-20
  • 打赏
  • 举报
回复
_Owns是auto_ptr的一个变量,定义为:
bool _Owns;

其中“_Owns(_P != 0)”怎么理解, _Owns又不是一个函数,后面怎么还有"(_P != 0)”?????????
qwedcxza 2003-10-20
  • 打赏
  • 举报
回复
explicit 指示这个构造函数不使用隐士自动类型转换
_THROW() 指示一个异常规范,它将不抛出任何异常,
: 后面初始化了 auto_ptr 的几个成员变量

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧