C++ 从堆空间删除对象
在main函数中,我使用new创建了一个对象,而不是删除它。我希望一旦进程退出,堆空间就会被清除。下面是一个示例代码,其中类a的对象是类B的成员变量。类B也有一个multimap作为成员变量C++ 从堆空间删除对象,c++,heap-memory,C++,Heap Memory,在main函数中,我使用new创建了一个对象,而不是删除它。我希望一旦进程退出,堆空间就会被清除。下面是一个示例代码,其中类a的对象是类B的成员变量。类B也有一个multimap作为成员变量 Class A { Public: A(); //have definition in cpp file ~A();//have definition in cpp file Private: Int a; }; Class B{
Class A
{
Public:
A(); //have definition in cpp file
~A();//have definition in cpp file
Private:
Int a;
};
Class B{
Private:
Std::multimap<string,string> map_test;
Public:
A a;
B(); //have definition inn cpp file
~B();//does not have any definition in cpp file
};
int main()
{
B *b = new B();
/* code section where it fills some 1000 key value pairs in the multimap
for some purpose */
return 0;
}
A类
{
公众:
A();//在cpp文件中有定义
~A();//在cpp文件中有定义
私人:
INTA;
};
B类{
私人:
Std::多重map试验;
公众:
A A;
B();//在cpp文件中具有定义
~B();//在cpp文件中没有任何定义
};
int main()
{
B*B=新的B();
/*代码部分,其中它填充多重映射中的大约1000个键值对
出于某种目的*/
返回0;
}
我的理解是:
你问了很多问题 首先,它的最佳实践是总是清除内存,即使进程退出并清除所有内存(正如它所做的那样)。始终处理它..使用共享\u ptr很容易做到
析构函数总是以正确的顺序被调用,但是多重映射是一个危险的程序,因为你应该清除多重映射中的元素,因为如果你存储指针,它可能会导致严重的泄漏你问了很多问题 首先,它的最佳实践是总是清除内存,即使进程退出并清除所有内存(正如它所做的那样)。始终处理它..使用共享\u ptr很容易做到 析构函数总是以正确的顺序被调用,但是多重映射是一个危险的程序,因为你应该清除多重映射中的元素,因为如果你存储指针,它可能会导致严重的泄漏
地图
,那么您可能需要清理地图
,那么您可能需要清理b
的任何理由,您只需在堆栈上创建对象,就不必考虑资源管理