Skip to content

败犬日报 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 就没问题。

揣摩面试官意图,可能是会覆盖虚指针。