gpt4 book ai didi

c++ - 访问类成员指针

转载 作者:行者123 更新时间:2023-11-28 07:25:09 24 4
gpt4 key购买 nike

假设我有如下列表和节点的定义:


template <class T> 
class List {
public:
class Iterator;
class ConstIterator;

//Constructors and Destructors.
List() : head(NULL), tail(NULL), size(0) {}
List(const List& list);
~List();

//Methods
Iterator begin();
ConstIterator begin() const;
Iterator end();
ConstIterator end() const;
void insert(const T& data);
void insert(const T& data, const Iterator& iterator);
void remove(const Iterator& iterator);
int getSize() const;
Iterator find(const T& item);
ConstIterator find(const T& item) const;
void sort();

//Operators
List operator = (const List& list);


private:
class Node;
Node* head;
Node* tail;
int size;
};


template <class T>
class List<T>::Node
{
public:
//Constructors and destructors
Node(const T& _data, const Node* _next) : data(_data), next(_next) {}
~Node(); //Destructor

//Methods


//Operators
Node operator = (const Node& node);

private:
T data;
Node* next;
};

我正在编写一个函数来将数据插入到这样的列表中:


    template<class T>
void List<T>::insert(const T& data)
{
Node newNode = new Node(data, NULL);

if (head == NULL)
{
head = &newNode;
tail = &newNode;
}
else
{
(*tail)->next = &newNode;
tail = &newNode;
}
size++;
}

但是我觉得奇怪的是,如果我将 (*tail)->next = &newNode; 换成 (*tail).next = &newNode; 它仍然可以编译.为什么?正确的做法是什么?

最佳答案

你的类的定义可以(为了这个问题的目的)简化为:

class List {
...
private:
Node* head;
Node* tail;
};

class Node {
...
private:
Node* next;
};

现在在您的 List::insert 方法中:

Node newNode = new Node(data, NULL);
(*tail)->next = &newNode;

...当您使用new 表达式时,结果将是指向新分配内存的指针。
你应该做的是:

Node* newNode = new Node(data, NULL);
tail->next = newNode; // <-- equivalent to (*tail).next = newNode;

关于c++ - 访问类成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com