对carray有点疑虑。
比如类
class A
{
public:
A();
~();
CString m_strName;
}
使用
CArray<A,A> arr;
A t;
t.name="test";
arr.add(t);
这样的代码有问题吗,arr[0]的m_strName的值会不会不是test
比如类
class A
{
public:
A();
~();
CString m_strName;
}
使用
CArray<A,A> arr;
A t;
t.name="test";
arr.add(t);
这样的代码有问题吗,arr[0]的m_strName的值会不会不是test
但是一般我们都用carray<&a,&a>或Carray<A*,A*>,这样不用去考虑A的深拷贝问题,否则这样复制可能会有问题,例如CArray<A,A> array;array.add(a);array[0] = A'
class A
{
public:
A()
{
m_str=new TCHAR[20];
}
~A()
{
delete []m_str;
}
CString m_strName;
LPTSTR m_str;
}
就出问题了,奇怪。
试试TCHAR * m_str;???
m_str=new TCHAR[20];
class A
{
public:
A()
{
m_str=new TCHAR[20];
}
~A()
{
delete []m_str;
}
CString m_strName;
LPTSTR m_str;
}使用
CArray<A,A> arr;
A t; 这个地方调用了t构造函数,假设t.m_str的地址是0x00000001;
t.name="test";
arr.add(t); 这个地方add函数里会生成一个A的临时对象,假设是t1,t1.m_str=0x00000002;
但是t1又被t赋值了(t1=t),也就是说t1.m_str又变成了0x00000001; 这样就出问题了,
carray析构时会调用A的析构,那0x00000001又被delete了