T& operator[] (int nIndex) 和 count T& operator[] (int nIndex) count怎么理解? atl里面的代码,不知道这个operator[]的作用是个啥? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对coust写错表示歉意。这是类中的两个函数,怎么用呢,能不能给个例子啊? 假如定义了一个该类的对象,名为test,就是用test[0]、test[1]这样的写法,执行到这里时会调用这个函数。 class CSimpleArray{public:// Construction/destruction...// Operations... const T& operator[] (int nIndex) const { ATLASSERT(nIndex >= 0 && nIndex < m_nSize); if(nIndex < 0 || nIndex >= m_nSize) { _AtlRaiseException(EXCEPTION_ARRAY_BOUNDS_EXCEEDED); } return m_aT[nIndex]; } T& operator[] (int nIndex) { ATLASSERT(nIndex >= 0 && nIndex < m_nSize); if(nIndex < 0 || nIndex >= m_nSize) { _AtlRaiseException(EXCEPTION_ARRAY_BOUNDS_EXCEEDED); } return m_aT[nIndex]; }...// Implementation class Wrapper { public: Wrapper(const T& _t) : t(_t) { } template <class _Ty> void * __cdecl operator new(size_t, _Ty* p) { return p; } template <class _Ty> void __cdecl operator delete(void* /* pv */, _Ty* /* p */) { } T t; };// Implementation void InternalSetAtIndex(int nIndex, const T& t) { new(m_aT + nIndex) Wrapper(t); } typedef T _ArrayElementType; T* m_aT; int m_nSize; int m_nAllocSize;};不好意思,还是不太明白,我是在这里看到的代码,按您的说法,test[0]是不是就表示test.m_aT[0],可m_aT是T类指针,test.m_aT[0]又是什么意思啊另外,顺便问下,new(m_aT + nIndex) Wrapper(t)又应该怎么理解啊,初学MFC,感觉好复杂,请多多指教:) Image对象在debug下delete出错.. 如何用VC打印一个窗口及上面的控件 谁有中文数字转数字的代码? 帮我看看:编译错误,无法定位错误... 在资源管理器里程序大小没变化,但是实际有内存泄露,一般是什么原因? DLL多线程+STL::deque的问题,公司没有人能解决. 各位高手帮帮忙,给我讲讲gluNurbsSurface()的具体用法吧,我感觉有点晕 问个差不多的问题,高手指教 为什么自定义消息在debug版好用,到了release版就不好用了呢? 简单的现象,复杂的问题,挑战高手 如何将C的开源库封装成DLL 重载new运算符
这是类中的两个函数,怎么用呢,能不能给个例子啊?
{
public:
// Construction/destruction
...
// Operations
...
const T& operator[] (int nIndex) const
{
ATLASSERT(nIndex >= 0 && nIndex < m_nSize);
if(nIndex < 0 || nIndex >= m_nSize)
{
_AtlRaiseException(EXCEPTION_ARRAY_BOUNDS_EXCEEDED);
}
return m_aT[nIndex];
}
T& operator[] (int nIndex)
{
ATLASSERT(nIndex >= 0 && nIndex < m_nSize);
if(nIndex < 0 || nIndex >= m_nSize)
{
_AtlRaiseException(EXCEPTION_ARRAY_BOUNDS_EXCEEDED);
}
return m_aT[nIndex];
}
...
// Implementation
class Wrapper
{
public:
Wrapper(const T& _t) : t(_t)
{
}
template <class _Ty>
void * __cdecl operator new(size_t, _Ty* p)
{
return p;
}
template <class _Ty>
void __cdecl operator delete(void* /* pv */, _Ty* /* p */)
{
}
T t;
};
// Implementation
void InternalSetAtIndex(int nIndex, const T& t)
{
new(m_aT + nIndex) Wrapper(t);
} typedef T _ArrayElementType;
T* m_aT;
int m_nSize;
int m_nAllocSize;
};
不好意思,还是不太明白,
我是在这里看到的代码,按您的说法,test[0]是不是就表示test.m_aT[0],可m_aT是T类指针,test.m_aT[0]又是什么意思啊
另外,顺便问下,new(m_aT + nIndex) Wrapper(t)又应该怎么理解啊,初学MFC,感觉好复杂,请多多指教:)