背景
我正在阅读其他人编写的代码,而且我对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,所以用最少的例子进行详尽的描述会非常有帮助。
答案 0 :(得分:3)
除非存在与成员同名的参数,否则在正常函数中永远不需要它。在构造函数中,您可以使用initalizer列表来防止歧义。使用模板时可能需要使用this
指针。