如何保证当模板类成员是指针时正确释放模板类成员

How to guarantee that the template class member is correctly freed when this member is a pointer?

本文关键字:成员 释放 指针 何保证      更新时间:2023-10-16

有一个模板类A:

template<typename T>
class A {
public:
    T t;
    A(T t) {
        this->t = t;
        cout << "A constructor" << endl;
    }
    ~A() {
        cout << "A destructor" << endl;
    }
};
t 是

类 A 的成员,如果 t 是指向动态分配内存的指针,以便默认析构函数无法释放它,例如:

A<SomeType*> a(new SomeType());

因为我们不知道t是否是指针,所以我们不能像这样做解构器:

~A() {
    delete t;
    cout << "A destructor" << endl;
}

我的问题是如何保证无论t是否是指针都没有内存泄漏

如果

T是一个原始指针,那么在"Modern C++"中,你应该假设它不拥有它指向的内存位置。如果您需要所有权语义,则应使用像 std::unique_ptrstd::shared_ptr 这样的智能指针 - 它们会在自己之后清理,并且可以简单地用作T而无需更改A

如果您有无法控制的原始指针并拥有一些内存,那么您应该在将其传递给 A 之前将其包装在智能指针中。

DR: T需要照顾自己的资源,你应该假设它这样做了。