拥有的和看的,各用各的类型
(本条路线统一用 g++ -std=c++17 -O0 -Wall 编译)
#include <iostream>
#include <memory>
#include <vector>
struct Res {
static int made, gone;
int v;
explicit Res(int x) : v(x) { made++; }
~Res() { gone++; }
};
int Res::made = 0;
int Res::gone = 0;
/* 拥有的那一方拿 unique_ptr;只是看一眼的那一方拿裸指针 */
class Bag {
public:
void add(int v) { items_.push_back(std::make_unique<Res>(v)); }
const Res *peek(std::size_t i) const {
return (i < items_.size()) ? items_[i].get() : nullptr;
}
int size() const { return static_cast<int>(items_.size()); }
private:
std::vector<std::unique_ptr<Res>> items_;
};
int main() {
int owed = 0, n = 0, first = 0, none = 0;
{
Bag b;
b.add(10);
b.add(20);
n = b.size();
first = b.peek(0)->v;
none = (b.peek(9) == nullptr);
}
owed = Res::made - Res::gone;
std::cout << n << "/" << first << "/" << none << "/" << owed << "\n";
return 0;
}
全部评论