以下分配是否始终既没有内存泄漏也没有未初始化甚至未分配的内存?
结果a
中的单元格与结果b
中的单元格的地址是否相同?
无论我们有多少载体载体...都会出现这种情况?
vector<vector<double>> a, b;
// Give a and b random contents: empty, rectangular, ragged, etc.
a = b;
答案 0 :(得分:4)
动态分配可能产生的所有内存问题都由std::vector
照顾,operator=
完全按照您的想法行事。如果它的良好做法是另一个问题..
答案 1 :(得分:1)
多么惊喜!没有人选择exception safety。
标准库中的每段代码都遵循基本异常安全性。某些操作可以确保强大的异常安全性其他操作是noexcept(nothrow guarantee)。
对于矢量复制,标准并没有多说。但我知道libstdc ++和libc ++确保了强大的异常安全性。因此,操作成功并确保所有后置条件,或者抛出异常并且不更改向量的状态。
编程时,任何合理的c ++编码器都会这样做,始终确保每段代码都能确保基本异常安全。此外,最好在注释中指定异常安全确保每个功能。
您的问题非常贴切。异常安全性使容器实现变得微不足道。
答案 2 :(得分:0)
虽然不一定是最佳实践,但矢量矢量矢量完全有效。