如何在分配更多内存空间之前检查指针是否为 NULL

How to check whether a pointer is NULL before allocating more memory space?

本文关键字:检查 指针 是否 NULL 空间 分配 内存      更新时间:2023-10-16

我正在为我的项目使用抽象工厂设计模式。

CPattern * CObjectA::Create(void)
{
    CPattern *p = new CPattern;
    patternList.push_back (p);
    return *p;
}
//Member variable
CPattern *pat = NULL;
pat = Obj.Create();

CObjectA 将删除析构函数期间分配的空间。问题是,如果客户端再次执行此操作:

pat = Obj.Create();

我会分配另一个空间并拍打它。如果这被调用几百次,我会继续创造空间而不分配它。

有没有办法在我为其分配另一个空间之前检查 pat 是否为空?

感谢您的帮助!

delete pat;
pat = Obj.Create();

更好的解决方案是将pat设置为智能指针,当您重新分配给新对象时,它将自动删除对象。

保持patternList最新状态完全是另一个问题。

你的代码不一致:Create函数返回一个引用,但应该返回一个指针(正如你后面的pat = Obj.Create();所暗示的那样)。 (工厂自然返回指针而不是按引用,因为后者鼓励意外复制到基类型的局部变量中 - 称为切片,其中不复制特定于实际运行时类型的数据成员)

"CObjectA 将删除析构函数期间分配的空间" - true,但对于堆分配的对象,您必须delete它们才能触发析构函数。 "客户端"在替换pat之前应检查并delete

delete pat;  // does nothing if pat's already NULL...
pat = new CObjectA.Create();