В эти дни я начинаю махать ногами с c ++, и из-за моего опыта работы с Java у меня, очевидно, возникают некоторые проблемы в понимании некоторых функций c ++.
Поскольку java предлагает только ссылки иПримитивы. Одна из самых загадочных для меня особенностей c ++ - поля без указателей (и не примитивов).
Вот пример того, что я имею в виду.
Если я должен написать реализацию на С ++в c ++ из списка объектов типа XI было бы написать что-то вроде:
class XList{
private:
struct node {
X* data;
node* next;
};
node* first;
public:
*/
a lot of methods
*/
}
Этот код, вероятно, ужасен, я знаю о шаблонах, STL и еще много чего, но проблема для менявот только поле «данные».Если объявлять «данные» как указатель X, я предполагаю, что могу использовать его способом, очень похожим на ссылки Java.
Что может быть причиной для объявления данных как X (X data;).В чем разница?Я знаю разницу между распределением в стеке и в куче, но есть ли здесь какое-либо соединение?
Пожалуйста, помогите мне немного лучше разобраться в этой теме.
Спасибо.
--- ОБНОВЛЕНИЕ: ----
Большинство ответов, кажется, сосредоточены на разнице между использованием обычного типа на указателе в общем .
Возможно, я написал вопрос неправильно, но я уже знаю разницу между размещением в стеке или в куче (по крайней мере, основ).Что я не могу понять, так это то, что, по моему (вероятно, ошибочному) мнению, использование простого типа в переменных-членах (не в поле, спасибо за исправление) должно быть просто неким угловым случаем.Особенно когда используются шаблоны, копия данных для меня не имеет смысла.
Вместо этого каждый раз, когда я вижу реализацию некоторой структуры данных, используется простой тип.
Например: если вы ищете"bst c ++ template" в Google вы найдете множество реализаций, подобных этой:
template<class T>
class BinarySearchTree
{
private:
struct tree_node
{
tree_node* left;
tree_node* right;
T data;
};
tree_node* root;
public:
/*
methods, methods and methods
*/
};
Вы действительно хотите сделать копию всех вставленных данных типа Tна этом дереве, не зная его размера?Поскольку я новичок в языке, я полагаю, что что-то неправильно понял.