gpt4 book ai didi

c++ - 防止模板中的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 02:06:01 25 4
gpt4 key购买 nike

我有模板

template <class T>
class A
{
T* t_;
A(){t_ = new T();}

void SetItem(T& t)
{
t_ = t;
}

};

这个模板类有2个案例

1. A<T> a;
2. A<T*> b;

如果我调用两次 SetItem

a.SetItem(T());
a.SetItem(T());

内存会被正确清理吗?

如果我这样调用也是一样的:

b.SetItem(new T());
b.SetItem(new T());

我知道内存不会被清理

问题:

  1. 如何对只需要的模板进行约束 TT*
  2. 如果我使用模板 A<T*>如何防止泄漏。我应该修改类(class)还是在外面照顾它?
  3. 每当我使用 A<T> 时,有什么方法可以使它正常工作吗?或 A<T*>

我认为使用智能指针或自动指针是一种选择。但我不确定。

最佳答案

快速的回答是,这取决于使用 A 类的人来清理堆分配的内存。如果您使用 std::list 并在其中存储指针,那么您(而不是列表)负责对它们调用 delete。不要试图让您的模板化容器检测指针并删除它们。

我想如果您使用带有指针模板参数的类 A,那么在某个时候您会在 GetItem() 返回时调用 delete(我假设该类会提供)。

(另外,SetItem 应该采用 const T&。)

关于c++ - 防止模板中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174053/

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