败犬日报 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
}