C ++中的静态成员函数

时间:2014-12-11 14:37:17

标签: c++

我正在浏览一个C ++示例,用于克隆对象。

#ifndef CLIPBOARDSTACK_H
#define CLIPBOARDSTACK_H

#include <QStack>

#include "getEntity.h"

class clipboardStack
{
public:
    static clipboardStack *instance()
    {
        if (!inst)
            inst = new clipboardStack;

        return inst;
    }

    void push(getEntity *entity)
    {
        clips.push(entity);
    }

    getEntity *pasteEntity()
    {
        if (clips.count() == 0)
            return 0;

        return clips.last();
    }

    getEntity *pop()
    {
        if (clips.count() == 0)
            return 0;

        return clips.pop();
    }

    bool isEmpty() const
    {
        return clips.empty();
    }

private:
    QStack<getEntity *> clips;
    static clipboardStack *inst;
};

#endif // CLIPBOARDSTACK_H

其中getEntity为:

#ifndef GETENTITY_H
#define GETENTITY_H

#include <QGraphicsItem>


class getEntity : public QObject, public QGraphicsItem
{
public:
   getEntity(QObject *parent = 0) : QObject(parent) {}
   virtual ~getEntity() {}

   virtual getEntity *clone()
   {
       return 0;
   }


};

#endif // GENTITY_H

但我无法得到线条的含义。

该行的含义是什么:

static clipboardStack *instance()
    {
        if (!inst)
            inst = new clipboardStack;




return inst;

}

有人可以解释一下上面的确切做什么,以及这两个类的简要说明吗?

2 个答案:

答案 0 :(得分:3)

static clipboardStack *instance()
    {
        if (!inst)
            inst = new clipboardStack;




return inst;

}

这是单例模式的代码。如果没有类clipboardStack的实例,那么它将创建它,否则它将返回已经创建的实例。

注意: - 单例的实现不是线程安全的。

答案 1 :(得分:0)

  

static clipboardStack * instance()       {           if(!inst)               inst = new clipboardStack;

     

return inst;

     

}

这是单例模式,通常它们会编写此模式,以便在任何时间点只有一个类的实例。

如果没有创建的clipboardstack实例。你只需创建一个。下次当有人调用instance()时,它会传递之前创建的同一个实例。不会再次创建新实例。

我猜你必须将clipboardstack指针初始化为NULL。这是一个很好的编程习惯。如果您处于调试模式,这可能指向未初始化的内存,例如0xCDCDCD,这不是null,每次调用instance()时,都会得到0xCDCDCD,最终会导致程序崩溃。