5
爲什麼Node析構函數在下面的代碼中只調用一次而不是5次?向量的智能指針析構函數調用
#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:看來你正在慢慢期待代碼充當這樣的文本方式複製參數表達式到每個元素構造一個*宏*。但情況並非如此;該表達式被評估*一次*並綁定到構造函數參數。我想這就是表達式評估和宏之間的區別,這就是爲什麼擁有宏仍然很好。像Scheme這樣的語言可以讓你做到這一點。 –