在C++中,释放指针通常使用delete或delete[]操作符;
如果指针指向的是单个对象,可以使用delete操作符进行释放;
在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(dangling pointer)问题;
cpp
void CShifangView::OnDraw(CDC* pDC)
{
CShifangDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str1;
int* ptr = new int; // 动态分配一个整型对象
*ptr = 9999;
str1.Format("0X%x", ptr);
pDC->TextOut(20, 20, str1);
delete ptr;
str1.Format("0X%x", ptr);
pDC->TextOut(20, 50, str1);
ptr = NULL;
str1.Format("0X%x", ptr);
pDC->TextOut(20, 80, str1);
}
delete ptr 之后ptr还是有值;ptr=NULL之后才是0;
如果指针指向的是数组,则需要使用delete[]操作符进行释放,
int* arr = new int[10];
......
delete[] arr; // 释放内存
arr = nullptr; // 将指针置为空,避免悬空指针问题
此外,在C++11之后,推荐使用智能指针(如std::shared_ptr、std::unique_ptr)来管理动态分配的内存,以更好地避免内存泄漏和手动释放的麻烦;