C ++使用operator delete来表示auto(堆栈)指针

时间:2017-07-14 14:32:56

标签: c++

我必须使用operator delete作为堆栈指针吗?

例如:

User * p = new User;
delete p;              //needed?

2 个答案:

答案 0 :(得分:2)

当你使用delete时,你没有删除指针,所以它是一个堆栈指针还是任何其他类型的指针没有区别。

当您使用delete时,您正在删除指针指向的内存块。如果该块分配了new,那么它总是在堆上。 (如果没有使用new分配,那么您不应该delete。)

答案 1 :(得分:2)

另一个角度是,不,你必须使用运算符delete,因为你不应该在非库代码中使用裸指针。

在现代C ++中,您的示例应该是:

std::unique_ptr<User> p = std::make_unique<User>();

没有delete,没有new

注意:在这个微粒的情况下,make_unique可以无痛地替代new,但由于在其他示例中它可能不是,所以教自己是一个好习惯 - make_unique是一个可以使用的功能。

相关问题