相关疑难解决方法(0)

是否可以删除非新对象?

我有一个对象,其中包含指向其他对象的指针向量,如下所示:

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创建的对象时会不会产生任何不良后果?

c++ destructor memory-management new-operator

16
推荐指数
2
解决办法
1万
查看次数

删除指向自动变量的指针

请看这个代码

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

1
推荐指数
1
解决办法
1423
查看次数

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

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

第一个代码:

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)

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

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

c++ pointers

0
推荐指数
1
解决办法
123
查看次数