[英]Static member functions in 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;
}
有人可以解釋我上面的確切做什么,這兩個類簡要說明了嗎?
static clipboardStack *instance()
{
if (!inst)
inst = new clipboardStack;
return inst;
}
這是單例模式的代碼。 如果沒有類clipboardStack的實例,那么它將創建它,否則它將返回已經創建的實例。
注意: - 單例的這種實現不是線程安全的。
static clipboardStack * instance(){if(!inst)inst = new clipboardStack;
返回
}
這是單例模式,通常它們會編寫此模式,以便在任何時間點只有一個類的實例。
如果沒有創建的clipboardstack實例。 你只需創建一個。 下次當有人調用instance()時,它會傳遞之前創建的同一個實例。 不會再次創建新實例。
我猜你必須將clipboardstack指針初始化為NULL。 這是一個很好的編程習慣。 如果您處於調試模式,這可能指向未初始化的內存,例如0xCDCDCD,這不是null,每次調用instance()時,您將獲得0xCDCDCD,最終會導致程序崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.