簡體   English   中英

C ++中的靜態成員函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM