gpt4 book ai didi

c++ - 带指针的模板类的析构函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:40 25 4
gpt4 key购买 nike

我有一个问题。考虑这个模板类

template<class T> 
class nodo{
public:
T data;
};

假设我没有重新定义析构函数。如果我们假设 T=int,则标准析构函数会释放数据。但是如果 T=int* 会发生什么?只是指针要被释放还是对象也被指向了?理论上只是指针。

如何释放指向的对象?最后,我该如何编写一个模板类的析构函数,该类的模板参数可以是一个指针(以及显式释放指针)?

最佳答案

您最好的选择是使用 std::unique_ptr<int>std::shared_ptr<int>作为模板参数,即使用

nodo<std::unique_ptr<int>> n1;

代替

nodo<int*> n1;

你可以试试这样的:

// Noop deleter
template <typename T> struct deleter
{
void operator()(T& ptr) {}
};

// deleter that does something
template <typename T> struct deleter<T*>
{
void operator()(T* ptr) { delete ptr; }
};


template<class T>
class nodo{
public:
using deleter_t = deleter<T>;
T data;

~nodo()
{
deleter_t()(data);
}
};

但是,您还得担心另一种蠕虫病毒。 nodo 时会发生什么是复制构建或分配给另一个 nodo目的?您需要处理所有造成 The Rule of Three 的问题和 The Rule of Five相关。

关于c++ - 带指针的模板类的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37688585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com