Vedo altre domande simili al mio, ma non riesco ancora a capirlo.Perché gli oggetti creati in un loop hanno lo stesso indirizzo?
Ecco il mio codice:
#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";
}
}
Quando eseguo questo "nuovo indirizzo di nodo a" è sempre lo stesso indirizzo ripete ogni iterazione, ma "l'indirizzo nuovo nodo b" è un indirizzo diverso ogni volta.
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
Non capisco perché aeb non sono uguali. Più precisamente: non è & newNode l'indirizzo dell'oggetto che ho appena creato? E non è vectorOfNodes [i] anche quell'oggetto? Quindi non è & vectorOfNodes [i] anche l'indirizzo dell'oggetto?
Compilatore magico. –
aeb non sono uguali perché sono oggetti diversi in diverse posizioni di memoria. a è probabilmente la stessa ogni iterazione perché quell'indirizzo di memoria può essere riutilizzato per ogni iterazione come misura di ottimizzazione. – twsaef
Non è & newNode l'indirizzo dell'oggetto che ho appena creato? E non è vectorOfNodes [i] anche quell'oggetto? Quindi non è vectorOfNodes [i] anche l'indirizzo dell'oggetto? –