-1

我有一个名为“字节”的类,它让我分配/释放动态内存。但我遇到了问题,我不知道在哪里释放它在析构函数上?或编写诸如 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(); 
}

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

4

2 回答 2

1

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

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

于 2013-01-24T04:17:47.090 回答
0

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

于 2013-01-24T04:59:14.277 回答