在C ++中为指针赋值

时间:2010-10-01 18:07:23

标签: c++ pointers

这是我使用的代码片段:

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);
}

如果listNULL,则应创建新的Location,指针list应指向该新位置。这是我期望从这段代码中获得的行为,但在gdb退出此函数之前,我注意到list仍然是NULL。我在这里做错了什么?

我在Location* &list中使用&符确保我可以永久(与本地)更改提供的指针。

2 个答案:

答案 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);
}