关于c ++中的内存和删除对象

时间:2012-09-17 09:25:06

标签: c++

我将举一些例子并解释一下。首先,我声明一些像

这样的对象

CString* param = new CString[100]

当我宣布这个时,我的记忆会增加一点,因为它是一些实现的字符串。然后我将此对象存储在某些CString列表中,就像

一样
List<CString> myList = new List<CString>; // new list of CString

myList.add(param);

这是我的问题:我想知道,当我删除myList时,我的参数不会被删除,对吧?参数中的记忆仍然存在。

我误解了吗?

2 个答案:

答案 0 :(得分:5)

该代码无法编译,因为myList包含对象,而不是指针,并且因为myList是一个对象,而不是一个指针,所以new在那里是非法的:

List<CString> myList;List<CString>类型的对象。 new List<CString>;会返回List<CString>*paramCString*myList.add()需要CString,而不是CString*

底线:这些都是基本概念,拿一本好书并阅读。 C ++是一种复杂的语言,你不能只从示例片段中学习它,或者假设相同的概念和语法与其他语言相同。

答案 1 :(得分:1)

c ++的经验法则:如果您输入new,则需要delete,除非您使用某种智能指针。

请注意,在您的情况下,您需要使用

delete [] param ;

当您删除数组时。