败犬日报 2024-11-27
1. unique_ptr
能不能看情况决定是否析构
unique_ptr
会存储 deleter(只是有时候会被空基类优化了)。
可以成员变量加个 bool,在 deleter 里进行判断;或者构造函数传入不同的 deleter。
cpp
#include <bits/stdc++.h>
struct A {
~A() { std::cout << "called ~A()\n"; }
};
struct Foo {
Foo()
: p(std::unique_ptr<A, void (*)(A *)>(
new A, +[](A *a) { delete a; })) {}
Foo(A *a) : p{std::unique_ptr<A, void (*)(A *)>(a, +[](A *a) {})} {}
std::unique_ptr<A, void (*)(A *)> p;
};
int main() {
Foo{};
A a;
Foo{&a};
std::cout << "===114514===\n";
}
2. 面试官问我 memset(this, 0, sizeof(*this))
会有什么问题
如果这个类是 standard layout 就没问题。
揣摩面试官意图,可能是会覆盖虚指针。