从单例类中删除对象

时间:2017-10-09 11:25:32

标签: c++ design-patterns singleton

我想在C ++中创建一个简单的Singleton类,其中包含指向其他类型的指针。

单身人士将在某个时刻成为该指针的拥有者。

所以这是删除Test类型对象并在Singleton析构函数上释放内存的好方法吗?

 class Test{...};
 class Singleton
 {
    public:
    static Singleton& getInstance()
    {
        static std::unique_ptr<Singleton> instance(new Singleton());
        return *instance.get();
    }

    void SetTest(Test* test);
    Test* GetTest() const;
    ...
    private:
      Singleton(){}
      ~Singleton(){ if(test) delete test;} // ??
      Test* test;
     ...
 };

PS:我无法为Test对象使用智能指针。

1 个答案:

答案 0 :(得分:1)

给这个问题一些结论:是的,通常可以像你提议的那样删除对象。但是,请注意以下警告:评论中已经指出:

  • 确保在单例的构造函数中初始化testnullptr。否则,您可能最终会尝试删除随机存储器地址。 (一些程序员老兄)
  • 您不需要在析构函数中检查nullptr。删除nullptr通常是安全的,不会做任何事情。 (Massimiliano Janes和here
  • 可能在您的情况下使用智能指针,这是更可取的。 (一些程序员,Massimiliano Janes)