运算符函数调用中的新函数

时间:2013-04-25 12:46:47

标签: c++ arguments new-operator operator-keyword

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

F(new A());

删除操作符是否会释放已分配的内存,或者我必须创建和删除对象,如下所示:

F(A* a) {} 

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

1 个答案:

答案 0 :(得分:1)

是的,它会释放内存,但最好在C ++ 11之前使用智能指针,例如std::shared_ptrboost::shared_ptr。同样在您的示例中,最好将释放的指针设置为NULL以避免双重释放到avoiding dangling pointer errors.

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

您将无法将其称为F(new A());,并且需要传递对指针保持变量的引用。就像第二个变种一样。应该有A* a = new A();,表示a是指针。