Skip to content

败犬日报 2025-02-28

1. 单元测试怎么测 private 函数

好的实践是测接口功能而不是内部实现。如果你觉得你特别需要测 private 函数,很有可能意味着需要修改设计,把复杂的逻辑单独提出来一个工具类。

如果一定要测,就用 -fno-access-control(不要用 #define private public 给代码下毒)。

推荐阅读 https://google.github.io/googletest/advanced.html#testing-private-code

2. 可不可以写一个程序,开不开 -fno-access-control 行为会不同

用 SFINAE。

3. unique_ptr 的大小

如果 Deleter 是默认的,或者是空类,大小是 8(一个指针的大小)。在实现上可以用空基类优化把这个 Deleter 空间搞掉。

cpp
#include <iostream>
#include <memory>

struct A {
    void operator()(int*) {}
};

int main() {
    std::unique_ptr<int, A> a;
    std::tuple<int*, A> b;
    std::cout << sizeof(a) << '\n';  // 输出 8
    std::cout << sizeof(b) << '\n';  // 输出 8
}