c++ - 当这个成员是指针时,如何保证模板类成员被正确释放?

标签 c++ pointers

有一个模板类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 是一个原始指针,那么在“现代 C++”中,您应该假设它不拥有它指向的内存位置。如果您需要所有权语义,您应该使用智能指针,例如std::unique_ptrstd::shared_ptr - 它们会自行清理并可以在不改变 A 的情况下被简单地用作 T

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

tl;dr:T 需要处理自己的资源,您应该假定它会处理。

关于c++ - 当这个成员是指针时,如何保证模板类成员被正确释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848683/

相关文章:

定义数组时出现 C++ 错误

c - 将树节点复制到数组中的段错误

c++ - Makefile:将 perl/python 文件从源目录复制到构建目录

c++ - 获取可执行文件路径

c++ - 删除正在收听的对象?

c - 从行中读取单词

c++ - 常量元组 - 但能够更改内容(引用)?

c - 如何修复警告 : assignment from incompatible pointer type?

c++ - 如何在 C++ 中替换 stringstream 中的某些字符?

c++ - uint8_t vector 的内存地址