删除模板类后内存泄漏
Memory leak after deleting template class
如果我有以下类:
// ComponentMan.h
class ComponentMan
{
public:
template<class T>
void CreateComponent<T>()
{
T* temp = new T();
delete temp; // Memory leak?
}
}
- 删除temp会导致内存泄漏吗? 因为程序不知道T的大小?
- 如果是,我该如何避免?
这里没有内存泄漏,因为程序知道temp
的大小。编译器在编译时将模板化的参数替换为实际类型,这样当程序运行时,它就确切地知道temp
在删除时,编译器不知道temp
所指向的对象的大小,但它不需要知道,因此不存在泄漏。例如:
struct T { int t; };
struct U : public T { int u; };
T * temp = new U();
delete temp; // compiler doesn't know whether it's dealing with a T or a U
暂时忘掉c++,只考虑C。
int * ptr = malloc(100);
free(ptr);
这段C代码可以工作,尽管我们不需要提醒编译器我们的int数组有多大。
(编辑:澄清一下,我们在这里谈论的是删除时间。编译器在创建时比删除时知道的更多。问题是"在删除时,系统如何知道要删除多少内存?"一个答案是http://c-faq.com/malloc/freesize.html)相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏