鑑於這種一小段代碼:斷言這兩個指針指向NULL不發生後刪除()
#include <iostream>
#include <assert.h>
using namespace std;
struct Foo
{
// something
};
int main()
{
Foo *p1 = new Foo;
Foo * p2 = p1;
assert(NULL != p1);
delete p1;
p1 = NULL;
assert(NULL != p2);
delete p2;
cout << "everything is cool!" << endl;
return 0;
}
當我刪除p1
,第二斷言(assert(NULL != p2);
)沒有失敗,爲什麼?
輸出:everything is cool!
那麼爲什麼p2
斷言不會失敗?
因爲p2仍然設置爲p1所具有的地址。在更改之後,它不會獲得p1的值。 – drescherjm