例如,假设我有 class 我想用一个接受向量和索引的构造函数初始化这个 class (仅作为示例)。 所以我得到 但是,访问向量中的随机索引是不安全的,因为如果超出范围,它将是 UB。 所以,我抛出一个异常 然而,这实际上并没有拯救我,因为成员初始化器列表在构造函数体之前运行。 因此,可能的越界 ...
例如,假设我有 class 我想用一个接受向量和索引的构造函数初始化这个 class (仅作为示例)。 所以我得到 但是,访问向量中的随机索引是不安全的,因为如果超出范围,它将是 UB。 所以,我抛出一个异常 然而,这实际上并没有拯救我,因为成员初始化器列表在构造函数体之前运行。 因此,可能的越界 ...
这是我的代码的简化:import Database.PostgreSQL.Simple (Connection) import qualified Streaming.Prelude as S import Streaming.ByteString.Char8 as C import Streami ...
由于 Flutter 中的安全性,我在代码中有一个错误,我试图通过使用LATE声明变量来解决它。<br / 但是当我尝试构建它时它出现了另一个: 错误这是我的代码: ...
当新容器的任何分配或元素的复制因异常而失败时,目标容器的当前内容是否会保持不变? ...
考虑std::function定义:namespace std { template<class> class function; // not defined template<class R, class... ArgTypes> class ...
我有一个 function,我希望它有强大的异常保证: 我能想到的使它具有强大的异常保证的唯一方法如下: 然而,这真的很丑陋而且容易出错吗?有没有比我上面提出的更好的解决方案,我能听到有人告诉我我需要使用 RAII,但我无法弄清楚如何,因为pop_back function正常返回时不得进行操作。 ...
如果自定义比较器在重新平衡期间抛出异常, std::map会做什么? 显然,它应该记住所有先前的回合并将所有内容返回到其原始 state。 这是真的吗? ...
这是 libstdc++ 中 new 运算符的实现: 谁保证构造函数中的异常会释放分配的 memory? Upd:感谢评论员——实际上我的意思是新表达式的异常安全。 ...
有效的现代 C++ 第 146 页: 这是 C++17 之前的不安全调用: 它曾经是不安全的,因为可以在new Widget但在std::share_ptr构造函数之前调用std::share_ptr并且如果computePriority产生异常,则动态allcoated Widget 将被 ...
我使用复合模式来表示设备,我想在关闭它们的电源(调用它们的 dtor)之前将其关闭。 我在尝试对设备进行分组时遇到了问题,尤其是关于它们的状态。 在以下情况下我将如何进行: 工作站可能包含多个设备,您希望在切断工作站电力之前安全关闭所有设备。 (在这个比喻中,我很便宜)。 还值得注意的是,我 ...
我了解到线程间通信的一种方式是共享一些原子数据结构。 例如: 尽管Point::operator=(Point const &)被删除,但调用std::atomic<Point>的赋值运算符似乎没有问题,如下所示: 如何实施此操作? 我可能会想到的一种解决方案是使用pl ...
在编写异常安全代码时,所有私有成员函数是否应该至少保证基本的异常安全? 在这种情况下,最佳/最佳做法是什么? 备择方案? 例如,假设我有一个 class Foo和public function 成员DoSomething ,它调用private function 成员DoSomeOfIt 。 D ...
我正在编写自己的容器,该容器不需要可移动和可复制的类型。 我认为在异常安全方面我可以稍微简化逻辑。 但是我注意到,分配器的construct和destroy成员函数没有关于何时可以和不能抛出异常的措辞。 我很确定我以前读过这些措辞。 否则,即使我的类型不可移动,当我调整缓冲区大小以增加容量时, c ...
如果 kotlin 提倡安全代码,例如: val currentName = "Some Guy" getDataFromServer()?.getUsers()?.find { it.name == currentName }?.profilePicture?.let { showPictur ...
我有一个不可复制的Item游戏,因为它们应该是独一无二的: class Creature能够接收Item并将其添加到其inventory : 这种方法看起来不错而且干净,但有一个小问题:如果我的代码的任何部分可以在std::bad_alloc之后恢复并因此捕获recieve_item()的 ...
我使用的是 GCC 7.3.1,但也在 coliru 上进行了测试,我认为它是 9.2.0 版。 使用以下内容构建: 这是rai.cpp : 运行它会导致: 我没有看到 Visual C++( Microsoft (R) C/C++ Optimizing Compiler Version 19.2 ...
如果在将对象移至std :: vector时内存分配失败,并且抛出bad_alloc,std :: vector是否保证从对象移出的对象不变/仍然有效? 例如: ...
我正在根据2018年后的圣地亚哥草案( N4791 )实施我自己的载体,并对实施强大的异常安全性有一些疑问。 这是一些代码: 我看到这个代码有2个问题。 我试图遵循std::move_if_noexcept逻辑,但是如果元素不是移动可构造但是allocator_traits::c ...
文档说 Deleter 应该是: 不可建造 nothrow 可调用(因为它是从~unique_ptr() noexcept nothrow 可破坏的(出于上述原因) 我的问题是为什么uniqut_ptr被定义为允许可能抛出的Deleter 。 例如,所有unique_ptr构造函 ...