我必须使用operator delete
作为堆栈指针吗?
例如:
User * p = new User;
delete p; //needed?
答案 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
是一个可以使用的功能。