小编use*_*354的帖子

单例行为相关查询

我知道这是关于单身人士模式的非常愚蠢的问题,但它仍然是面试官的首选.你可以在下面的代码片段中告诉我吗?

(1)删除单例对象后,为什么我仍然可以调用show()方法,它工作正常.

delete obj;
obj=NULL;
obj->show();
Run Code Online (Sandbox Code Playgroud)

(2)创建obj1对象后,为什么我无法打印acquire_lock和release_lock函数的内容,即使打印状态"一次"也会打印一次,如果我们增加计数器i而不是2则只打印1,为什么?

Foo *obj1=MySingleton<Foo>::GetInstance();
Run Code Online (Sandbox Code Playgroud)

(3)使用unique_ptr和singleton对象会产生任何负面影响.

代码段:

#include <iostream>
#include <fstream>
#include <memory>
#include <string>

using namespace std;

static int i;

class Lock
{
public:
    Lock(){};
    ~Lock(){};

    void acquire_lock()
    {
        cout<<"aquired lock for class";
    }

    void release_lock()
    {
        cout<<"released lock for class";
    }

};

class Foo
{
public:
    void show()
    {
        cout<<"\ndone\n"; 
    }
};

template <class T>
class MySingleton
{
protected:

    MySingleton() {}

private:

    //holds one and only object of MySingleton
    static T* m_pOnlyOneInstance;
    MySingleton(const MySingleton …
Run Code Online (Sandbox Code Playgroud)

c++ templates design-patterns smart-pointers

5
推荐指数
1
解决办法
93
查看次数

标签 统计

c++ ×1

design-patterns ×1

smart-pointers ×1

templates ×1