带有"new"的指针和带有"&variable"的指针之间有什么区别

Lio*_*ing 0 c++ pointers

我有一个简单的问题,但有时候我有点困惑.

第一个代码:

Person *ptoPerson = new Person;
cout << ptoPerson->printMsg("Hi") << endl;
delete ptoPerson;
Run Code Online (Sandbox Code Playgroud)

第二个代码:

Person p;
Person *ptoPerson = &p;
cout << ptoPerson->printMsg("Hi") << endl;
delete ptoPerson;
Run Code Online (Sandbox Code Playgroud)

删除指针时会发生此问题.
第一个代码工作正常,指针删除,但第二个代码在实现它时出现问题在运行时.

为什么第二个代码无法删除指针?
我认为这两种情况下的指针是一个指针,可以删除它,或者我错了.

Lig*_*ica 5

我认为这两种情况下的指针是一个指针,可以删除它,或者我错了.

你错了.

你不"删除一个指针"; 你删除你使用你创建的东西new(通过将指针传递给delete运算符).

在这里,你没有使用任何东西new,所以没有什么可以做的delete.

理想情况下,您的代码看起来像这样:

Person p;
cout << p.printMsg("Hi") << endl;
Run Code Online (Sandbox Code Playgroud)