🔴 半路走人,一个也没漏
(本条路线统一用 g++ -std=c++17 -O0 -Wall 编译)第二次调用走到一半就返回了:
#include <iostream>
#include <memory>
#include <vector>
struct Res {
static int gone;
int v;
explicit Res(int x) : v(x) {}
~Res() { gone++; }
};
int Res::gone = 0;
/* 现代写法:容器装 unique_ptr,半路走人也一个不漏 */
static int build(int stop_at) {
std::vector<std::unique_ptr<Res>> v;
v.reserve(3);
for (int i = 1; i <= 3; i++) {
v.push_back(std::make_unique<Res>(i * 10));
if (i == stop_at) return -1; /* 半路走人 */
}
int sum = 0;
for (const auto &p : v) sum += p->v;
return sum;
}
int main() {
int a = build(0); /* 一路走完 */
int b = build(2); /* 走到第二个就返回 */
std::cout << a << "/" << b << "/" << Res::gone << "\n";
return 0;
}
全部评论