ListNode<T>::ListNode(const T &value) : data(value) {}
当值传递给参数列表中的数据时,它会将数据定义为值的副本,还是将类成员链接到传递给构造函数的原始变量?
编辑:为清晰起见添加更多信息
list_node.hpp
template <typename T> class ListNode { friend class List<T>; public: ListNode<T>(const T &); private: T data; };
list.hpp
template<typename T> class List { public: void insert_at_front(const T &); private: ListNode<T> *get_new_node(const T &); };
list.cpp
void List<T>::insert_at_front(const T &value) { ListNode<T> *new_node_ptr = get_new_node(value); ... } ListNode<T> *List<T>::get_new_node(const T &value) { return new ListNode<T>(value); }
struct Foo { Foo(const Bar& b) : m_b(b) {} Bar m_b; }; struct Foo2 { Foo2(const Bar& b) : m_b(b) {} const Bar& m_b; };
正如您所看到的,构造函数代码是相同的,但这两个类的功能有所不同。第一个类将复制传递的 Bar ,因此如果传入的局部变量超出范围,则是“安全的”。第二个类简单地获取引用。实际上,这类似于保存对传入变量的引用。因此,如果传入的变量超出范围,则 Foo2 将有一个悬而未决的参考。
Bar
Foo2