有一个模板类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_ptr
和std::shared_ptr
- 它们会自行清理并可以在不改变 A
的情况下被简单地用作 T
。
如果你有你无法控制的原始指针并且拥有一些内存,那么你应该在之前将它包装在一个智能指针中将其传递给 A
。
tl;dr:T
需要处理自己的资源,您应该假定它会处理。
关于c++ - 当这个成员是指针时,如何保证模板类成员被正确释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848683/