这是我使用的代码片段:
void Move::AddToMovesList(Location* &list, int row, int col) {
// If the list is empty, create the first item
if (list == NULL)
list = new Location(row, col);
// List exists, so append
else
list->Add(row, col);
}
如果list
为NULL
,则应创建新的Location
,指针list
应指向该新位置。这是我期望从这段代码中获得的行为,但在gdb退出此函数之前,我注意到list
仍然是NULL
。我在这里做错了什么?
我在Location* &list
中使用&符确保我可以永久(与本地)更改提供的指针。
答案 0 :(得分:1)
我们不要在这里重新发明轮子...... Know your libraries.
如果你使用STL列表容器(或任何其他容器),那么你不需要打扰空指针。
答案 1 :(得分:0)
就个人而言,我根本不会使用指针。
class Location
{
public:
void add(int row, int col)
{
data.push_back(std::make_pair(row,col));
}
bool isEmpty() const {return data.empty(); }
private:
std::vector<std::pair<int,int> > data;
};
class Move
{
public:
// Pass a reference to the list.
// No special case processing if the list is empty.
// No problems with ownership.
// No problems with lifespan associated with new/delete
void addToMoveList(Location& list, int row, int col)
{
list.add(row, col);
}
};
int main()
{
Location list; // Don't use new if you can declare a local variable.
Move move;
move.addToMoveList(list, 10, 2);
}