我正在浏览一个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;
}
有人可以解释一下上面的确切做什么,以及这两个类的简要说明吗?
答案 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,最终会导致程序崩溃。