相关疑难解决方法(0)

从析构函数中抛出异常

大多数人都说永远不会从析构函数中抛出异常 - 这样做会导致未定义的行为.Stroustrup指出"向量析构函数显式地为每个元素调用析构函数.这意味着如果元素析构函数抛出,向量破坏失败......实际上没有好的方法来防止从析构函数抛出的异常,所以库如果元素析构函数抛出",则不保证"(来自附录E3.2).

这篇文章似乎另有说法 - 抛出析构函数或多或少都没问题.

所以我的问题是 - 如果从析构函数抛出会导致未定义的行为,那么如何处理析构函数期间发生的错误?

如果在清理操作期间发生错误,您是否只是忽略它?如果它是一个可能在堆栈中处理但在析构函数中不正确的错误,那么从析构函数中抛出异常是否有意义?

显然,这类错误很少见,但可能.

c++ destructor exception raii

246
推荐指数
10
解决办法
11万
查看次数

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

什么是堆栈展开?

什么是堆栈展开?通过搜索但找不到启发性的答案!

c++ stack

186
推荐指数
9
解决办法
8万
查看次数

我应该存储整个对象,还是指向容器中对象的指针?

从头开始设计新系统.我将使用STL来存储某些长寿命对象的列表和地图.

问题:我是否应该确保我的对象具有复制构造函数并在我的STL容器中存储对象的副本,或者通常更好地自己管理生命和范围并将指针存储到我的STL容器中的那些对象?

我意识到这在细节方面有点短暂,但我正在寻找"理论上"更好的答案,如果它存在,因为我知道这两种解决方案都是可能的.

使用指针的两个非常明显的缺点:1)我必须在超出STL的范围内管理这些对象的分配/释放.2)我无法在堆栈上创建临时对象并将其添加到我的容器中.

还有什么我想念的吗?

c++ pointers stl

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

清理STL列表/指针向量

为了安全地清理向量或指针列表,你可以用最短的C++块来实现什么?(假设您必须在指针上调用delete?)

list<Foo*> foo_list;
Run Code Online (Sandbox Code Playgroud)

我宁愿不使用Boost或用智能指针包装我的指针.

c++ stl

49
推荐指数
8
解决办法
9万
查看次数

对于STL或!STL,这就是问题所在

毫无疑问,我会选择将STL用于大多数C++编程项目.最近我提出了这个问题,"有没有你不会使用STL的情况?"......

我越是想到它,我就越意识到也许应该是我选择不使用STL的情况......例如,一个非常大的长期项目,其代码库预计将持续数年......也许是真正符合项目需求的定制容器解决方案值得最初的开销吗?你怎么想,有没有你选择不STL的情况?

c++ containers stl

40
推荐指数
7
解决办法
6578
查看次数

如果使用remove_if和items是指向对象的指针,如何删除向量中的项?

我担心通过执行以下操作会遇到内存泄漏问题:

(示例代码)

class myItem //random container stuff mostly. All primatives.
{
    int index;
    char* name;
    int val1;
    int val2;
};

class vecList
{

    vector< myitem* > *myVec;

    void delete()
    { 
        MyVec->erase(std::remove_if(myVec->begin(), MyVec->end(), IsMarkedToDelete), MyVec->end()); //leak here?
    }
};
Run Code Online (Sandbox Code Playgroud)

如果它是一个指针,擦除不释放内存,对吗?如果我没有使用remove_if,我可以在销毁之前调用指针上的delete.在这种情况下我该怎么做?智能指针?我不想用它们重新实现所有内容,我真的不想添加boost库.

谢谢!

c++ memory-leaks vector erase remove-if

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