我这样定义了一个结构体用来传递指针:
struct NodeParam
{
CListCtrl* pList;
CStrig str;
};
用这个动态数组进行管理
CArry <NodeParam*, NodeParam*> m_Node;
我动态创建一个CListCtrl:
CListCtrl* list = New CListCtrl;
想要将该指针放入动态数组m_Node中进行管理,于是:
NodeParam *pNode;
pNode->pList = list;
pNode->str = _T("");
m_Node.Add(pNode);
出现了问题, 指针没有初始化。。
于是我:
NodeParam *pNode = new NodeParam;
然后再复制就没有问题了。
我想知道,new NodeParam的这个空间是什么空间, New CListCtrl不是已经为控件分配指针了吗?
new NodeParam 是结构体的空间吧?
那最后资源释放的时候需要两个空间都释放吗?
m_Node.RemoveAll(); 这样不行吧?需要:
for()
{
NodeParam* pNode = m_Node.getat(i);
CListCtrl* p = pNode->pList;
delete p;
delete pNode;
}
这样?
struct NodeParam
{
CListCtrl* pList;
CStrig str;
};
用这个动态数组进行管理
CArry <NodeParam*, NodeParam*> m_Node;
我动态创建一个CListCtrl:
CListCtrl* list = New CListCtrl;
想要将该指针放入动态数组m_Node中进行管理,于是:
NodeParam *pNode;
pNode->pList = list;
pNode->str = _T("");
m_Node.Add(pNode);
出现了问题, 指针没有初始化。。
于是我:
NodeParam *pNode = new NodeParam;
然后再复制就没有问题了。
我想知道,new NodeParam的这个空间是什么空间, New CListCtrl不是已经为控件分配指针了吗?
new NodeParam 是结构体的空间吧?
那最后资源释放的时候需要两个空间都释放吗?
m_Node.RemoveAll(); 这样不行吧?需要:
for()
{
NodeParam* pNode = m_Node.getat(i);
CListCtrl* p = pNode->pList;
delete p;
delete pNode;
}
这样?
第一个问题:new NodeParam是在动态区分配的空间,NodeParam *pNode;语句只是声明了一个指针,而指针没有指向任何位置,所以肯定要new 。在动态区分配的空间里才有 CListCtrl*和 CStrig 。
第二个问题:同上。
第三个问题:的确是都要释放。
第四个问题:要看你RemoveAll函数如何写了。
第五个问题:这样写可以。
赠送:_T("")可以在工程属性设置中设置为多字符集之后,就可以直接用""了。最后:一定要给我分。
NodeParam::NodeParam() : pList(NULL), str(_T(""))
{
}NodeParam::NodeParam(CListCtrl *p, CString s) : str(s)
{
pList = p;
}
那么内置类型 int double ……
他们在定义的时候是已经分配了空间了吗?
int i= 0;
int *n = null;
n = &i;
不需要 new 是这个原因吗?
那内置类型 int double 什么的是在定义的时候就分配空间了吗?
int i = 0;
int *p = null;
p = &i; 这样就没有问题,不需要new。
我的意思是int *p 可以直接赋值 , NodeParam *pNode 为什么就不可以。
NodeParam obj;
NodeParam *pNode = &obj;
pNode->pList = list;
错误并不是说pNode不可以直接赋值。pNode->pList = list语句的意思是:把pNode所指向的NodeParam 的空间里的pList赋值。但是现在pNode指向的东西却还不存在。所以更加无法赋值了。
你明白了吗?