我正在编写一个模板类,它将指针作为输入并存储它.指针旨在指向由另一个类分配的对象,并将其传递给此包含类.
现在我想为这个容器创建一个析构函数.我应该如何释放此指针指向的内存?我无法知道它是一个数组还是一个元素的先验.
我是C++的新手,所以请耐心等待.我一直使用C语言,而Java是我选择的OO语言,但在想要学习C++和我的项目的速度要求之间,我已经使用了C++.
将容器从模板更改为容器是否可以实现自己的析构函数?
如果你不知道它是否与分配做new
或new[]
,那么它是不是安全地删除它.
您的代码可能似乎有效.例如,在我工作的一个平台上,差异仅在您拥有具有析构函数的对象数组时才有意义.所以,你这样做:
// by luck, this works on my preferred platform // don't do this - just an example of why your code seems to work int *ints = new int[20]; delete ints;
但是你这样做:
// crashes on my platform std::string *strings = new std::string[10]; delete strings;
您必须记录此类预期的使用方式,并始终按预期分配.您还可以将标志传递给对象,指定它应该如何销毁.另请参阅boost的智能指针,它可以为您处理这种区别.
简短回答:
如果你使用[]和new你想使用[]删除.
//allocate some memory myObject* m = new myObject[100]; //later on...destructor... delete m; //wrong delete[] m; //correct
那是裸骨,你能看到的另一件事就是提升.考虑到你不确定它是一个数组还是单个对象,也很难回答.你可以通过一个标志告诉你的应用程序是否使用删除或删除[]来检查这一点.