C++ | void *data[1000]
C++ | void *data[1000]
在 c++ 中保持静态分配数组中的指针是否合适?
void *data[1000];
在32位和64位机器上void*
的大小不同吗?
这几乎是绝对不合适的。Void指针一开始就非常糟糕,如果将它们与可变静态数据混合在一起,结果会非常糟糕。在它上面有一个神奇数字大小的原始未包装数组,我很高兴我的代码中没有这个。当然,如果你必须这样做,那么你必须这样做,但在令人难以置信的大多数新代码中,你不需要这样的东西。
是的,void*的大小不同
比void*
更好的选择是让每个对象都从基类派生,而使用base*
。
比固定大小的数组更好的选择是使用std::vector<base*>
或Boost指针容器。
是的,指针的大小在32位和64位系统之间是不同的——这就是关键所在。
是的,void*
的大小取决于系统位。
如果没有更多的细节,很难说使用固定大小的数组并在其中存储void*
指针是否合适——这通常不是一个好的选择,但有时你真的没有其他选择。
相关文章:
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ 初始化 .data 部分中的变量
- 模式"allocate memory or use existing data"
- boost::asio data owning `ConstBufferSequence`
- Python to C++ Data structure API
- 如何在C++中写入 1000 个文件时有效地缓冲
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- protobuf C++ SQLite handle blob data
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 为什么构造函数 Message(const T&data) 与 Message(T&& data) 冲突,当 T = int&时?
- "thread-safe data"与"thread-safe code/functions"的区别
- 为什么 std::find( s.begin(), s.end(), val ) 比集合 s 的 s.find(val) 慢 1000 倍<int>?
- 如何找到目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?
- 为什么可以将 std::unique_ptr* u1 <A>作为 u1[1000] 访问并且它仍然有效
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- C++ | void *data[1000]