【发布时间】:2010-12-30 20:39:39
【问题描述】:
听说c++程序员应该避免memset,
class ArrInit {
//! int a[1024] = { 0 };
int a[1024];
public:
ArrInit() { memset(a, 0, 1024 * sizeof(int)); }
};
所以考虑到上面的代码,如果你不使用 memset,你怎么能让一个 [1..1024] 填充零?C++ 中的 memset 有什么问题?
谢谢。
【问题讨论】:
-
你能给出你认为不应该在 C++ 中做 memset 的原因吗?我不知道为什么做 memset 会导致 C++ 出现任何问题。如果我错了,请纠正我。谢谢!
-
他可能是在“不要使用 memset 将类对象归零”的上下文中听到的。
-
@Jay:他们上面是好的。但是使用 memset 将类对象本身(不仅仅是单个成员)归零并不是一个好主意。如果对象包含具有构造函数(进行一些初始化)的成员,这尤其有问题。
-
顺便说一句,它是 [0..1023],而不是 [1..1024]。
-
我建议不要使用 C 样式数组,而是使用向量。在这种情况下,您可以将构造函数替换为 ArrInit() : a(1024, 0 ) {},这将删除 memset 并使您的类在风格上可以说是更“C++”。
标签: c++ initialization memset