相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

208
推荐指数
5
解决办法
5万
查看次数

对象指针向量上的vector :: erase()是否会破坏对象本身?

我有一个指向对象的向量.我需要从向量中删除一个元素并将该元素放在另一个列表中.

我读到擦除可以用来从向量中删除对象,但我还读到它在执行之前调用对象析构函数.

我需要知道擦除对象是否也会破坏它.

c++ stl vector

40
推荐指数
2
解决办法
6万
查看次数

由于delete运算符释放内存,为什么我需要析构函数?

来自c ++ FAQ:http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.9

记住:delete p有两件事:它调用析构函数并释放内存.

如果删除释放内存,那么析构函数需要什么?

c++ destructor delete-operator

6
推荐指数
2
解决办法
3150
查看次数

为什么我需要手动删除vector中的指针?

为什么我需要手动删除向量中动态创建的项目?当向量被删除时,为什么它们不会被删除或者它的析构函数被调用?

通常是这样的,但为什么需要?

vector<int*> v;
for (vector<int*>::iterator it = v.begin(); it != v.end(); ++it) 
{ 
   delete *it; 
}
Run Code Online (Sandbox Code Playgroud)

c++ destructor memory-management

4
推荐指数
2
解决办法
3314
查看次数

正确删除其他地方分配的std :: list中的指针

可能重复:
std :: list :: remove方法是否调用每个被删除元素的析构函数?

我有一个SpriteHandler类,允许用户注册指向Sprite对象的指针以进行绘制,它所做的就是访问对象上的方法.我想编写一个安全捕获程序,如果用户在程序结束时忘记这样做,则会自动删除与指针关联的内存(而且对用户来说也不用担心!):

 

//SpriteHandler.h
class SpriteHandler {
public:
//...
    void RegisterObject(Sprite* object);
    bool IsRegistered(Sprite* object);
    void UnregisterObject(Sprite* object);
private:
//...
    static std::list<Sprite*>* _sprite = NULL;
};

//SpriteHandler.cpp
std::list<Sprite*>* SpriteHandler::_sprites = NULL;


void SpriteHandler::RegisterObject(Sprite* object) {
    if(object == NULL) return;
    if(_sprites == NULL) _sprites = new std::list<Sprite*>();
    _sprites->push_back(object);
    _sprites->sort(UDLessSprite);
}

bool SpriteHandler::IsRegistered(Sprite* object) {
    return std::binary_search(_sprites->begin(), _sprites->end(), object);
}

void SpriteHandler::UnregisterObject(Sprite* object) {
    if(object == NULL) return;
    if(IsRegistered(object) == false) return;

    _sprites->remove(object);
    if(_sprites->size() <= 0) { …
Run Code Online (Sandbox Code Playgroud)

c++ iterator memory-management stdlist

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

delete []是否释放由指针指针分配的内存

我有一个指向其他对象的指针数组Comparable* array(在类的模板中).

我理解delete删除指针引用的内存,并delete []释放分配给数组中每个指针的内存.

我的问题是,如果我有一个包含指向其他对象的指针的数组,如何释放数组中每个指针数组本身引用的内存?

c++ memory allocation delete-operator

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

如果我在指向矢量std :: vector <Object*>*的指针上调用"delete",那么元素也会被删除吗?

可能重复:
对象的C++向量指针
是否std :: list :: remove方法调用每个被删除元素的析构函数?

如果我有一个std :: vector定义为:

std::vector<Object*>* myObjects;
Run Code Online (Sandbox Code Playgroud)

然后打电话:

delete myObjects;
Run Code Online (Sandbox Code Playgroud)

那么myObjects中的元素也会被删除吗?使用std :: array或任何其他stl容器有什么区别吗?

提前致谢

c++ memory allocation

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