【发布时间】:2009-06-19 23:24:30
【问题描述】:
这是我用 n 个指针创建的 C++ 类。
class SomeClass
{
private:
int* ptr1;
int* ptr2;
...
int* ptrn;
private:
// constructors, destructors, and methods
};
在初始化阶段,我想让所有这些指针都指向 NULL(或者在声明时让指针默认指向 NULL),而不是这样做:
void SomeClass::MakePtrNull()
{
ptr1 = NULL;
ptr2 = NULL;
...
ptrn = NULL;
}
有没有什么简单的方法可以实现这个目标?我只是想知道是否有任何方法可以避免键入 n 行 ptr = NULL;在我的功能中。提前致谢。
添加基于我目前收到的答案: 不幸的是,这些指针必须分开,因为它们用于不同的目的。我这样命名指针只是为了说明我正在尝试做的事情,但每个指针都有完全不同的目的。我想我必须像我已经做的那样让它们指向 NULL。感谢您的回答。
【问题讨论】:
-
请注意,如果类没有用户声明的构造函数, SomeClass() 将所有指针都为零。这意味着你可以这样做 *this = SomeClass();它会使所有指针都指向空指针。
-
@litb,在我的测试中,只有 SomeClass 的静态实例将所有指针都归零;自动和堆实例获取堆栈或堆中的任何内容。
-
假设没有用户声明的构造函数,那么 SomeClass() 被初始化,而不是 { SomeClass a; 中的 "a" }。 SomeClass() 递归地对它的所有成员进行值初始化。这将使任何指针成员成为空指针。如果您定义了一个自动变量,并且它没有用户声明的构造函数,则它不会被初始化。例如,您必须这样做 { SomeClass a = SomeClass(); }
-
@litb:这是……非常晦涩难懂。因此非常容易忘记做、做错或让你的代码的普通读者感到困惑。
-
@CesarB,有些 C++ 行混淆了,有些则没有。如果有人对某事感到困惑,可以随时阅读一本好的 C++ 书籍,或询问其作者。当然我不会做“*this = MyClass();”在此示例中将其指针作为副作用无效。但我会像下面解释的那样做。