我有一个对象,其中包含指向其他对象的指针向量,如下所示:
class Object {
...
vector<Object*> objlist;
...
};
Run Code Online (Sandbox Code Playgroud)
现在,对象将以这两种方式添加到列表中:
Object obj;
obj.objlist.push_back(new Object);
Run Code Online (Sandbox Code Playgroud)
和
Object name;
Object* anon = &name;
obj.objlist.push_back(anon);
Run Code Online (Sandbox Code Playgroud)
如果做一个简单的析构函数
~Object {
for (int i = 0; i < objlist.size(); i++) {
delete objlist[i];
objlist[i] = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试删除未使用new创建的对象时会不会产生任何不良后果?
请看这个代码
int i = 10; //line 1
int *p = &i; //line 2
delete p; //line 3
cout << "*p = " << *p << ", i = " << i << endl; //line 4
i = 20; //line 5
cout << "*p = " << *p << ", i = " << i << endl; //line 6
*p = 30; //line 7
cout << "*p = " << *p << ", i = " << i << endl; //line …Run Code Online (Sandbox Code Playgroud) c++ runtime-error memory-corruption undefined-behavior delete-operator
我有一个简单的问题,但有时候我有点困惑.
第一个代码:
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)
删除指针时会发生此问题.
第一个代码工作正常,指针删除,但第二个代码在实现它时出现问题在运行时.
为什么第二个代码无法删除指针?
我认为这两种情况下的指针是一个指针,可以删除它,或者我错了.