Perché il distruttore del nodo viene chiamato una sola volta invece di 5 volte nel codice qui sotto?Vector of smart pointers chiamata del distruttore
#include <iostream>
#include <vector>
#include <memory>
struct Node {
~Node() {std::cout << "Node destructor called.\n";}
};
void foo() {
std::vector<std::shared_ptr<Node>> nodes(5, std::make_shared<Node>());
}
int main() {
foo();
std::cout << "foo() ended.\n";
}
@prestokeys: Sembra che si erano in qualche modo aspettate il codice di agire come un * * macro che duplica testualmente l'espressione argomento in ogni costruttore elemento. Ma non è questo il caso; l'espressione viene valutata * una volta * e associata al parametro costruttore. Immagino che questa sia la differenza tra la valutazione dell'espressione e le macro, ed è per questo che è ancora bello avere dei macro. Lingue come Scheme ti permettono di farlo correttamente. –