0
void F(A* a)
{
    delete a; 
};

F(new A());

删除运算符是否会释放分配的内存,或者我必须像这样创建和删除对象:

F(A* a) {} 

A a = new A();
F(a);
delete a;
4

1 回答 1

1

是的,它会释放内存,但最好在 C++11 之前使用诸如std::shared_ptrboost::shared_ptr之类的智能指针。同样在您的示例中,最好将已释放指针设置为 NULL 以避免双重释放以避免悬空指针错误。

void F(A*& a)
{
    delete a; 
    a = NULL;
};

您将无法将其称为F(new A());直通,并且需要将引用传递给指针持有变量。就像在第二个变体中一样。应该在A* a = new A();那里,以表明这a是一个指针。

于 2013-04-25T12:48:20.730 回答