我是否必须检查此方法的指针有效性?

时间:2012-10-01 02:17:30

标签: c++ pointers

class A
{
private:
    A(){}; 
    ~A(){};
public:
    static A* GetInstance( void )
    {
        static A obj;
        return& obj;
    }
};

我想假设bad发生的事情只会在第一次发生,因为类构造函数只在第一次调用GetInstance时才初始化,我不知道深度很大我不相信C ++,所以当我需要一个指向这个类的指针时,我会在一个函数中多次使用它:

A* ptr = A::GetInstance();
if( ptr )
{

检查指针有效性,我相信该方法返回存储obj值的地址,以便ptr指向它,我猜它can't失败了。

请注意,我不是在谈论一个小应用程序,我目前正在开发一个500,000多行的MMO服务器应用程序,它可以处理数千个客户端并且必须保持打开数周而不会崩溃,防御性编程是最不起眼的需要。 确定 100%安全使用ptr而不检查其有效性吗?

3 个答案:

答案 0 :(得分:3)

当然,该函数无法返回空指针,因此没有必要检查它。返回引用可能更有意义,以明确它不会为null。

但是,无法保证函数始终返回指向有效对象的指针。如果从静态对象的析构函数调用它,则obj可能已经被销毁。这就是为什么全局可访问对象是一个非常糟糕的想法的一个原因,无论你是否将它们包装在像这样的Singleton反模式中。

答案 1 :(得分:2)

该函数将始终返回指向存在的对象的指针。唯一的危险是如果对象本身是无效的,这应该是由对象构造函数的抛出指示的。在你的情况下,你没有从构造函数中捕获异常,所以在这种情况下程序应该停止,否则它应该是好的。

检查NULL是没有意义的,因为您总是返回一个有效的地址。

答案 2 :(得分:1)

添加对指针的检查不太可能导致性能显着下降,但应该是不必要的。添加它,如果它会让你感觉更好。但是,我会更关心缓冲区溢出,内存泄漏以及其他更可能的问题,而不是编译器是否正确实现了static关键字。