C 适当的新用法
C++ proper new usage?
int* array = new int[ 10 ]( );
这是新操作员的适当用法吗?据我所知,先前的代码将在数组中初始化为0。
int* array = new int[ 10 ];
第二行代码只是初始化数组,但不将值设置为零?
使用新操作员的正确方法取决于您在分配内存后接下来要做的任何事情。
int* array = new int[10]();
将归零您正在分配的内存,因为它正在为数组中的每个int运行int Initializer。
int* array = new int[10];
不会初始化内存,因此数组中每个int的值将是您从new
获得的内存地址的值。如果您幸运的话,可能是零可能是零,但是很可能是其他一些内存请求/发行中留在那儿的垃圾。
一般而言,您需要将非专业化变量视为垃圾值,而在分配值之前不要使用它们。除非您将其用作随机数生成器中的熵,否则,即使那样,如果内存恰好太干净,它也可能不够随机。另一个罕见的用例可能是在关闭后的另一个程序留在内存中留下的内容。这两个示例都是规则的例外。
通常不初始化的最佳理由是速度。将数组中的每个项目设置为0的速度成本,尽管它可能很小,但如果您的数组很大,或者您经常执行此代码,则可能很明显。这是针对,当您知道在使用这些值之前将设置这些值时,您可以节省不必要的初始化它们的成本。
现在已经说过这一切,我也同意std::vector<int>
通常是更好的方法的评论,如果您不必担心内存泄漏的优势,那么这无非调试/开发时间,不应被低估),您还会获得很多好处。更不用说您可以使用可以使用常规数组的向量来完成所有相同的操作 - 这是因为向量分配了连续的内存。
std::vector<int> safeArray(10);
int* array = &safeArray[0]; // array now points to the 0th element in safeArray
用std :: vector丢失的一件事是,您不再选择是否初始化。
相关文章:
- 这个指针在c++中的用法
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 中函数中 Const 用法之间的差异
- equal_to模板类C++用法
- PCL 中的 GICP 用法
- C 适当的新用法
- 释放的指针没有被分配,没有任何新的用法