我正在通过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;

}

有人可以解释一下上面这两行的确切含义吗?

最佳答案



这是单例模式,通常他们编写此模式是为了在任何时间点仅具有该类的一个实例。

如果没有为剪贴板创建的实例。您只需创建一个。下次有人调用instance()时,它将传递之前创建的相同实例。不会再创建新实例。

我想您必须将剪贴板堆栈指针初始化为NULL。这是一个很好的编程习惯。如果您处于 Debug模式,则可能指向未初始化的内存,例如0xCDCDCD,该内存不为null,并且每次调用instance()时,您将获得0xCDCDCD,最终将导致程序崩溃。

10-04 14:44