我将举一些例子并解释一下。首先,我声明一些像
这样的对象 CString* param = new CString[100]
当我宣布这个时,我的记忆会增加一点,因为它是一些实现的字符串。然后我将此对象存储在某些CString列表中,就像
一样List<CString> myList = new List<CString>; // new list of CString
myList.add(param);
这是我的问题:我想知道,当我删除myList时,我的参数不会被删除,对吧?参数中的记忆仍然存在。
我误解了吗?
答案 0 :(得分:5)
该代码无法编译,因为myList
包含对象,而不是指针,并且因为myList
是一个对象,而不是一个指针,所以new
在那里是非法的:
List<CString> myList;
是List<CString>
类型的对象。 new List<CString>;
会返回List<CString>*
。 param
是CString*
。 myList.add()
需要CString
,而不是CString*
。
底线:这些都是基本概念,拿一本好书并阅读。 C ++是一种复杂的语言,你不能只从示例片段中学习它,或者假设相同的概念和语法与其他语言相同。
答案 1 :(得分:1)
c ++的经验法则:如果您输入new
,则需要delete
,除非您使用某种智能指针。
请注意,在您的情况下,您需要使用
delete [] param ;
当您删除数组时。