Warum wird der Node-Destruktor nur einmal statt 5 mal im folgenden Code aufgerufen?Vector of Smart Pointer Destructor Anruf
#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: Es scheint, dass Sie irgendwie der Code wie ein * Makro * zu handeln erwarteten, die textlich das Argument Ausdruck in jedem Elementkonstruktor dupliziert. Aber das ist nicht der Fall; Der Ausdruck wird * einmal * ausgewertet und an den Konstruktorparameter gebunden. Ich denke, das ist der Unterschied zwischen der Auswertung von Ausdrücken und Makros, und deshalb ist es immer noch schön, Makros zu haben. Sprachen wie Scheme lassen Sie das richtig machen. –