如何在分配更多内存空间之前检查指针是否为 NULL
How to check whether a pointer is NULL before allocating more memory space?
我正在为我的项目使用抽象工厂设计模式。
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();
相关文章:
- 如何强制检查指针值
- 检查指针是否指向矢量元素
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- 如何检查指针后面的对象是否有效或已删除?
- 如何检查指针是否在C 中删除
- 检查指针是否是带有变异模板的派生的指针
- C++ - 检查指针数组中的指针是否已"filled"
- 检查指针到向量C 内的对象
- 如何检查指针是否指向正确对齐的内存位置
- (C++) 检查指针数组中的空值
- 使用 new 并能够检查指针是否为 0(空)
- 如何检查指针指向的地址是否0x0?
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 如何检查指针数组中的 c++ 对象指针是否已设置
- C++:另一个"检查指针是否为空"
- 如何在分配更多内存空间之前检查指针是否为 NULL
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- 检查指针句柄是否有效
- 如何在没有带布尔的包装的情况下检查指针是否有效
- C++ - 检查指针是否指向有效内存(此处不能使用 NULL 检查)