我有一个名为'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();
}
现在......是否可以设置析构函数将调用的位置? 或者我上完课后应该免费打电话? 提前致谢。 快乐的编码。
答案 0 :(得分:1)
如果在堆栈上创建它(不通过new创建它),那么析构函数将在超出范围时自动调用。如果您通过new创建它,则需要在完成后使用operator delete自行释放它。不要在其上调用free(),使用new和delete运算符。不要试图手动调用析构函数,只需使用delete
是的,析构函数应释放类中剩余的所有动态分配的内存,除非你在类之外有一个指向它的指针。尽量不这样做,它会使内存管理变得困难,通常被认为是糟糕的设计。
答案 1 :(得分:0)
在构造函数中,您获取内存,并在析构函数中释放它。 它是自动化的本地或静态变量,但是当你有一个“新”时,你必须使用“免费”或“删除”或其他东西来告诉操作系统这部分内存现在对你来说是无用的,操作系统可以把它拿回来