我正在通过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,最终将导致程序崩溃。