如何保证当模板类成员是指针时正确释放模板类成员
How to guarantee that the template class member is correctly freed when this member is a pointer?
有一个模板类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_ptr
和 std::shared_ptr
这样的智能指针 - 它们会在自己之后清理,并且可以简单地用作T
而无需更改A
。
如果您有无法控制的原始指针并拥有一些内存,那么您应该在将其传递给 A
之前将其包装在智能指针中。
DR: T
需要照顾自己的资源,你应该假设它这样做了。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++ 在具有数组成员的类上无效指针/双精度释放
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 如何保证当模板类成员是指针时正确释放模板类成员
- 释放在不同同步上下文中使用的类成员
- 当类对象完成时,是否为 C++ 类的数据成员动态分配的内存会释放
- 释放 C++ 中指针成员的动态内存
- 释放不是 GDI+ 图像类的成员
- 正在释放std::list成员
- 为类的成员变量释放动态分配的内存会产生错误
- 何时使用alloca为类成员释放内存
- 在显式销毁对象之后但在其内存被释放之前调用成员函数是否合法?
- 释放成员指针