在析构函数上释放堆

时间:2013-01-24 04:13:15

标签: c++ winapi memory heap

我有一个名为'Byte'的类,它让我分配/释放动态内存。但我遇到问题,我不知道在析构函数中将它释放到哪里?或者编写像free()

这样的新函数

让我解释一下。

Byte string; // Default constructor created a heap saved in a private variable in class.

void assignsomething()
{
string += "Blabla"; // Created a block of memory
string += " Blabla2"; // Added data again.

} // if I write a destructor that free heap with HeapDestroy() i can't use data in main()

int main()
{
  assignsomething();
  MessageBoxA(0,string,0,0);
  // Byte.HeapFree(); 
}

现在......是否可以设置析构函数将调用的位置? 或者我上完课后应该免费打电话? 提前致谢。 快乐的编码。

2 个答案:

答案 0 :(得分:1)

如果在堆栈上创建它(不通过new创建它),那么析构函数将在超出范围时自动调用。如果您通过new创建它,则需要在完成后使用operator delete自行释放它。不要在其上调用free(),使用new和delete运算符。不要试图手动调用析构函数,只需使用delete

是的,析构函数应释放类中剩余的所有动态分配的内存,除非你在类之外有一个指向它的指针。尽量不这样做,它会使内存管理变得困难,通常被认为是糟糕的设计。

答案 1 :(得分:0)

在构造函数中,您获取内存,并在析构函数中释放它。 它是自动化的本地或静态变量,但是当你有一个“新”时,你必须使用“免费”或“删除”或其他东西来告诉操作系统这部分内存现在对你来说是无用的,操作系统可以把它拿回来

相关问题