3

可能重复:
是否值得在析构函数中设置指向 NULL 的指针?

在析构函数中设置一个指针(分配堆内存)是否毫无意义NULL

class SampleClass
{
    public:
        SampleClass( int Init = 0 )
        {
            Value = new int( Init );
        }

        ~SampleClass( void )
        {
            delete Value;
            Value = NULL; // Is this pointless?
        }

        int *Value;
};

在课程主题上,我应该什么时候使用explicit关键字?

4

4 回答 4

5

是的。这是没有意义的,因为对象正在被销毁。一旦它被销毁,将无法到达指针。

于 2011-02-13T15:19:43.983 回答
4

是的,将指针设置NULL在析构函数的最后是没有意义的,因为一旦你离开析构函数,它就不再存在了。

当你想避免隐式转换到你的类类型时,你可以使用显式关键字。:-)

例如,如果MyClass有一个构造函数采用int, 和一个 function f(const MyClass&),您可以调用f其中之一

f(42)

或者

f(MyClass(42))

如果您使构造函数显式,则只有后者会起作用。它可以使您免于一些不需要的隐式转换。

于 2011-02-13T15:26:09.407 回答
1

最好将指针设置为 NULL。

如果您在代码中的其他地方删除 SampleClass 实例,然后访问该值(使用另一个指向同一实例的指针),您将知道出了点问题,因为程序将在 NULL 取消引用时崩溃(因此您将知道您正在访问已删除的对象)。

否则,您可以继续使用已删除的对象并在很久以后才注意到错误(当内存被另一个对象覆盖时)。此类问题通常极难调试。

于 2011-02-13T15:18:06.777 回答
1

这并不是毫无意义的。虽然理论上确实不能再次访问该值,但如果有任何其他恶作剧开始发生,将其设置为 NULL 可能会在将来对您有所帮助。

于 2011-02-13T15:18:40.487 回答