当前位置:  开发笔记 > 编程语言 > 正文

检查C++中的指针定义

如何解决《检查C++中的指针定义》经验,为你挑选了3个好方法。

如何检查变量,特别是指针是否在C++中定义?假设我有一个班级:

class MyClass {  
public:

    MyClass();

    ~MyClass() {
        delete pointer; // if defined!
    }

    initializePointer() {
        pointer = new OtherClass();
    }

private:

    OtherClass* pointer;

};

Johannes Sch.. 22

为什么要担心检查指针值?只需将其初始化为空指针值,然后只需在其上调用delete即可.删除空指针什么都不做(标准保证它).

class MyClass {  
public:

    MyClass():pointer(0) { }

    ~MyClass() {
        delete pointer;
        pointer = 0;
    }

    initializePointer() {
        pointer = new OtherClass();
    }

private:

    OtherClass* pointer;

};

每次调用delete时,都应该将指针设置为空指针值.那你一切都很好.



1> Johannes Sch..:

为什么要担心检查指针值?只需将其初始化为空指针值,然后只需在其上调用delete即可.删除空指针什么都不做(标准保证它).

class MyClass {  
public:

    MyClass():pointer(0) { }

    ~MyClass() {
        delete pointer;
        pointer = 0;
    }

    initializePointer() {
        pointer = new OtherClass();
    }

private:

    OtherClass* pointer;

};

每次调用delete时,都应该将指针设置为空指针值.那你一切都很好.



2> Gabriel Isen..:

我倾向于在对象构造时将指针值初始化为NULL.这允许检查NULL以查看是否定义了指针变量.



3> Konrad Rudol..:

除了检查for 0(NULL)之外,一个解决方案是重构代码,以便强制指针始终有效.这并非总是可行,但在大多数情况下,这是最好的解决方案.

在您的情况下(如在大多数其他情况下),这意味着在构造函数中初始化指针(即,一旦其生命周期开始)并在其生命周期结束时销毁它.创建变量private并且不允许对它进行直接写访问以确保它始终保持有效.

这是C++中经常使用的模式,它有效地将指针对象的对象生命周期限制为类的生命周期.有时,它可能也是一种可行的解决方案,可以提供某种reset删除指针并立即重新初始化它的方法.如果这是以异常安全的方式编写的,那么您还确保指针永远不会无效.

难道不是创建一个boolEAN标志来跟踪指针的有效性.该解决方案没有将指针设置为优点和许多缺点0.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有