C++ 当模板类成员是指针时,如何保证该成员被正确释放?

C++ 当模板类成员是指针时,如何保证该成员被正确释放?,c++,pointers,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:

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){
这个->t=t;
cout如果
T
是原始指针,那么在“现代C++中”,您应该假设它不拥有它所指向的内存位置。如果您需要所有权语义,您应该使用智能指针,如
std::unique_ptr
std::shared_ptr
——这些指针会自动清理,可以在不更改
A
的情况下用作
t

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

tl;dr:
T
需要照顾自己的资源,你应该假设它会照顾自己。
如果
T
是一个原始指针,那么在“现代C++中”,您应该假设它不拥有它所指向的内存位置。如果您需要所有权语义,您应该使用智能指针,如
std::unique_ptr
std::shared_ptr
——这些指针会自动清理,可以在不更改
A
的情况下用作
t

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


tl;dr:
T
需要照顾自己的资源,你应该假设它会。
A
不应该负责取消分配它没有分配的内存。请继续阅读和。另外(如果你仍然选择按自己的方式实现它)它是析构函数,而不是解构函数。
A
不应负责取消分配它未分配的内存。请阅读和。此外(如果您仍然选择以自己的方式实现),它是解构函数,而不是解构函数。
A<SomeType*> a(new SomeType());
~A() {
    delete t;
    cout << "A destructor" << endl;
}