何时在成员函数中使用“this”指针

时间:2014-12-02 20:43:34

标签: c++ this

背景

我正在阅读其他人编写的代码,而且我对C ++编程还不熟悉。当我查看该人编写的类以及相应的成员函数时,我对this指针的使用感到困惑。在某些成员函数中使用this而在其他函数中没有使用。

为什么会这样?

我知道这对于最近开始做C ++的人来说是一个非常普遍的混淆。

代码段:

课程:

class InitTable {
public:
    InitTable();
    virtual ~InitTable();

    void clearTable();
    void addEntry(std::string sumoID);
    void deleteEntry(std::string sumoID);
    InitEntry* getEntry(std::string sumoID);
    IPv4Address getEntryIPaddress(std::string sumoID);

protected:
    std::map<std::string, InitEntry*> table; 
};

会员功能(this):

void InitTable::clearTable()
{
    this->table.clear();
}

会员功能(不含this):

void InitTable::deleteEntry(std::string sumoID)
{
    InitEntry* ie = getEntry(sumoID);
    if (ie != NULL)
    {
        table.erase(sumoID);
        delete ie;
    }
}

问题:

请注意,在void InitTable::clearTable()中,this->table.clear()使用了void InitTable::deleteEntry()table.erase()table使用this,而不使用void InitTable::clearTable() { table.clear(); // no "this" }

this->table.erase()

这里有什么诀窍?如果使用void InitTable::deleteEntry(std::string sumoID) { InitEntry* ie = getEntry(sumoID); if (ie != NULL) { this->table.erase(sumoID); // "this" added delete ie; } } 代替什么行为呢?

{{1}}

正如我所说,我有点像n00b,所以用最少的例子进行详尽的描述会非常有帮助。

1 个答案:

答案 0 :(得分:3)

除非存在与成员同名的参数,否则在正常函数中永远不需要它。在构造函数中,您可以使用initalizer列表来防止歧义。使用模板时可能需要使用this指针。