Widzę inne pytania, które wyglądają jak moje, ale nadal nie mogę tego zrozumieć.Dlaczego obiekty utworzone w pętli mają ten sam adres?
Oto mój kod:
#include<iostream>
#include <vector>
using namespace std;
template<typename Data_Type>
class node {
public:
Data_Type data;
node* next;
node(Data_Type data, node* next){
this->data = data;
this->next = next;
}
};
int main(){
vector<node<int> > vectorOfNodes;
for (int i = 0; i< 4; i++){
node<int> newNode = node<int>(i,NULL);
std::cout << "new node address a "<< &newNode << "\n";
vectorOfNodes.push_back(newNode);
std::cout << "new node address b "<< &vectorOfNodes[i] << "\n";
}
for (int i = 0; i< 4; i++){
std::cout << "data "<< vectorOfNodes[i].data << "\n";
}
}
Gdy ten, „nowy adres węzła A” jest zawsze taki sam adres, ale powtarza się każdej iteracji „Adres nowy węzeł B” jest inny adres każdym razem.
new node address a 0x7fff546c39b0
new node address b 0x7fe2f8c039d0
new node address a 0x7fff546c39b0
new node address b 0x7fe2f8c039f0
new node address a 0x7fff546c39b0
new node address b 0x7fe2f8c03a20
new node address a 0x7fff546c39b0
new node address b 0x7fe2f8c03a30
data 0
data 1
data 2
data 3
Nie rozumiem, dlaczego aib nie są tym samym. Dokładniej: czy nie jest & newNode adres obiektu, który właśnie utworzyłem? I czy vectorOfNodes [i] także nie jest tym obiektem? Więc nie jest to wektor2fc [2] również adres obiektu?
Kompilator magiczny. –
aib nie są takie same, ponieważ są to różne obiekty w różnych lokalizacjach pamięci. a jest prawdopodobnie taka sama dla każdej iteracji, ponieważ ten adres pamięci może być ponownie użyty dla każdej iteracji jako miara optymalizacji. – twsaef
Czy & noNode nie jest adres obiektu, który właśnie utworzyłem? I czy vectorOfNodes [i] także nie jest tym obiektem? Więc nie jest i vectorOfNodes [i] także adres obiektu? –