Я работаю над реализацией связанного списка на C++, и мне было интересно узнать время жизни исходных данных. Допустим, вызывающая программа создает новый ListNode со следующим конструктором. Моя проблема заключается в том, что исходная переменная может сильно отличаться от области действия, оставляя неопределенное поведение, если назначение члена данных не является копией значения.Определение члена класса с помощью ссылки, переданной через конструктор
ListNode<T>::ListNode(const T &value) : data(value) {}
Когда передается значение данных в списке параметров он будет определять данные в виде копии значения или будет член класса будет связан с исходным переменным передаются в конструктор?
EDIT: Добавление большего количества информации для ясности
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);
}
Это зависит от типа данных. – juanchopanza
Если вы хотите получить копию, вы должны передать ее по значению, а не по ссылке. Но, конечно, если 'data' является ссылкой, это не поможет. –
Значение сообщения объявления 'data'. – juanchopanza