struct中某一变量是用CString类型还是char数组类型?struct Mystruct
{
int ID;
CString Name;
int orderno;
};我感觉应用char数组类型,但CString 类型是否不好存储之类的;另外用了CString类型,是否memcpy 此struct变量有问题?
delete Mystruct是否有对CString对象释放不掉的情况?
{
int ID;
CString Name;
int orderno;
};我感觉应用char数组类型,但CString 类型是否不好存储之类的;另外用了CString类型,是否memcpy 此struct变量有问题?
delete Mystruct是否有对CString对象释放不掉的情况?
如果你的程序是用MFC,那这样是完全没有问题的,
如果是普通的C++/C程序,这样就会有问题了
至少用char数组的话,占的空间小
例如:
struct MYSTRUCT {
CString strName;
CString strSex;
CString strAge;
};
MYSTRUCT st;
int size = sizeof(st);
size的结果是12,也就是每个CString 对象在结构体中存放的只是他们的指针2、应该不会发生这中情况,我想CString的析构函数应该会完成内存的释放
另外使用CString或者char*就不能用memcpy而应该重新定义copy函数
基本就说这么多吧
c/c++用char
===================================================
如果有CString的话,不要用memset来清零,否则会出错的
===================================================
确实如此!但能说明原因吗?
(2)to bluebohe(薄荷) ( ) :
======================
另外使用CString或者char*就不能用memcpy而应该重新定义copy函数
======================
能解释一下原因吗?我感觉我这个地方有点模糊!谢谢!(3)to bluebohe(薄荷) ( ) :
======================
char*的时候最好加一个Attach和Detach函数,负责把该字符串指针和一个字符串指针联系起来,这
样的话,你就可以在析构函数中把它释放掉了,否则容易造成多次释放
=====================
能给个小例子吗?不好意思,这摸多高手参与,分太少,等揭贴后我单独再加分!!
大家共同进步呀!!!!
Attach是把结构体中的字符串指针赋值,Detach负责给结构体中的字符串指针清空,这样的话,如果你new了一个空间通过Attach赋值给结构体中字符串指针时,不Detach的话,可以通过析构结构体释放字符串指针,而你Detach时,结构体中的字符串指针赋空,就可以在外部删除new出来的字符串指针,这样的话程序看起来比较有条理。
(1)to flyelf(空谷清音):
===================================================
如果有CString的话,不要用memset来清零,否则会出错的
===================================================
确实如此!但能说明原因吗?的疑问:
主要是因为,CString中会自动调用CString::GetData()函数。如:赋值时、析构时
而GetData()函数的第一行就是ASSERT(m_pchData != NULL);
这句话的意思就是在进行后面的操作前确保改CString对象的m_pchData指针不为空,否则报错。
而你的memset操作恰恰将其指向了空。所以程序会不知不觉崩掉。
这也提醒我们,在对类内成员进行操作的时候,最好是通过类为我们提供的接口进行,而不要自作主张。(也就是封装的思想)