在C ++的内存管理方面有什么必要和必要的?

时间:2016-05-08 20:11:50

标签: c++ memory memory-management

所以,例如,如果我有一个带整数的类,当我完成该类并且我想将其从内存中删除时,我是否需要:

sum

或者我可以停止引用该类:

vector

1 个答案:

答案 0 :(得分:2)

delete &myInteger;

是将指针释放到生成在堆栈上的myInteger的无效尝试。要释放myInteger的内存(或注册),您只需要退出它所在的范围。

{
    int myInteger;
    myInteger = 5;
}  // myInteger goes away

但是,如果您有动态内存分配:

int* myInteger = new int;

你有责任明确释放它

int* myInteger = new int;
*myInteger = 5;
delete myInteger;  // release the memory pointed to, not the pointer

在现代C ++中,避免语言的这些尖锐边缘并使用C ++ 11智能指针(例如std::unique_ptrstd::shared_ptr来处理问题是一种良好的做法。你:

{  // start scope
    std::unique_ptr<int> myInteger std::make_unique<int>();
    *myInteger = 5;
}  // end scope -- unique_ptr cleans up for us.