拥有的和看的,各用各的类型

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

(本条路线统一用 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;
}
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论