与C ++中的delete和free函数混淆[重复]
||
这个问题已经在这里有了答案:
没有找到相关结果
已邀请:
6 个回复
漂截嘘
的对象调用
时,不会调用其析构函数,因此在此示例中,您会发生内存泄漏。另外,在此示例中,必须使用
,因为内存是由
分配的。
悸翠疮武昏
(和
)的任何类型,并且可能会或可能不会将
用作基础分配器(实际上,它可能不会)。同时,C ++ 03标准的§20.4.6/ 4说明: 函数“ 0”不会通过调用“ 8”来尝试取消分配存储。 意思是,任何“ 1”调用都可以以任何方式分配内存,但是“ 0”很可能不会正确地释放它。
稼悸
荆怖赡
茂坦湿床够
或
的地址调用
是未定义的行为。显然,在您的示例中,不会调用
的析构函数,但是在某些方面,这是您最少的担心。从字面上看,任何事情都可能发生。 (在我自己的开发环境中,我使用调试
和
。
返回的地址不是对
的调用返回的地址,并且调用
会产生各种各样的不良影响,包括可能破坏免费版。太空竞技场,造成以后的崩溃。)
期差骇蓟
不允许重复删除同一指针。 您需要做的就是查找“三法则” 但是基本上,当您的类包含RAW指针时,您还想确保所有的Copy Constructor / Assignment运算符/ Destructor都已定义。 因此,在分配内存时要记住的事情: new必须与删除匹配。 new []必须与delete []匹配。 free()只能用于malloc / calloc / realloc的结果 掌握了这些规则后: 尝试不要使用删除。 了解智能指针和容器(让它们为您工作)。 如果对象包含RAW指针(这种情况很少见,因为您已经了解了智能指针和容器)。您必须知道三个规则,以及如何确保编译器生成的方法不会意外使您的对象混乱。