同时使多个指针为NULL

sta*_*tor 6 c++ pointers

这是一个C++类,我用n个指针做了.

class SomeClass
{
private:
        int* ptr1;
        int* ptr2;
        ...
        int* ptrn;

private:
        // constructors, destructors, and methods
};
Run Code Online (Sandbox Code Playgroud)

在初始化阶段,我想让所有那些指针指向NULL(或者在声明时默认指针指向NULL)而不是这样做:

void SomeClass::MakePtrNull()
{
        ptr1 = NULL;
        ptr2 = NULL;
        ...
        ptrn = NULL;
}
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来实现这个目标?我只是想知道是否有任何方法可以避免输入n行ptr = NULL; 在我的功能.提前致谢.

根据我到目前为止收到的答案添加:不幸的是,这些指针必须分开,因为它们用于不同的目的.我将指针的名称作为这样只是为了说明我正在尝试做的事情,但每个指针都有一个完全不同的目的.我想我必须让它们指向NULL,因为我已经完成了.谢谢你的回答.

Ces*_*arB 11

而不是int *创建一个类似于智能指针的类,它的工作方式int *与使用NULL的默认构造完全相同:

template <typename T>
class MyPointer {
    T *p;

public:
    MyPointer() : p(NULL) { }
    MyPointer(T *o) : p(o) { }
    operator T*() const { return p; }
    // ...and the rest of the traditional smart-pointer operators
};
Run Code Online (Sandbox Code Playgroud)

然后,在你的课堂上使用它:

class SomeClass
{
private:
        MyPointer<int> ptr1;
        MyPointer<int> ptr2;
        ...
        MyPointer<int> ptrn;

private:
        // constructors, destructors, and methods
};
Run Code Online (Sandbox Code Playgroud)

MyPointer<int>类型的每个变量都将在SomeClass构造函数中自动初始化,无需任何额外的输入.如果您没有忘记或错误地实现任何MyPointer方法,它将完全像普通指针一样,并具有完全相同的大小和性能.

  • +1用于使用类型系统来准确表达编程意图. (2认同)

bri*_*zil 6

为什么不使用数组或向量而不是创建n个单独命名的指针?然后你可以在一个简短的for循环中进行归零.


Ecl*_*pse 5

你可以这样做:

void SomeClass::MakePtrNull()
{
        ptr1 = ptr2 = ptr3 = ... = ptrn = NULL;
}
Run Code Online (Sandbox Code Playgroud)