赋值给允许NULL成员的数组,而不使用堆
Assign to array that can allow NULL members, without using the heap?
对此有什么简单有效的答案吗?除了"决定哪一个更重要",那就是。
让我详细说明。我想要一个固定大小的数组。它表示可以为套接字服务器打开以接受客户端的会话槽。这些项目的数量有限(目前只有四个)。
也许从c++的角度来看,我的问题全错了。也许我应该把这些作为会话槽来考虑,这些会话槽虽然充满了会话对象,但在给定会话具有对连接的TCP套接字的引用之前不一定可用。这与大多数动态语言不同,在大多数动态语言中,我可以简单地将会话槽指定为空,直到会话填充数组中的该槽。
如果你想要一个具有可选语义的自动存储对象(即可能存在也可能不存在),你可以使用boost::optional
。
boost::optional<T>
是一个可以有0个或1个元素的容器。如果它是空的,它不存储T
对象,就像空向量不存储任何对象一样。实际上,您可以将boost::optional<T>
视为std::vector<T>
,其容量始终为1且不能增长。由于所需的存储大小是固定的,并且在编译时已知(sizeof(T)
),因此boost::optional
不需要任何动态分配。
没有什么可以阻止你仍然使用指针。指针可以指向任何非临时对象,包括位于堆栈上的对象。
的例子:
void func()
{
MyObject obj;
MyObject* p = 0;
if(some_condition)
p = &obj;
...
}
推测十四的答案,这段代码将工作,并且实际上是常见的:
bool function(int parameter, TYPE& return_val) {
if (parameter > 7) {
return_val = 7;
return true;
}
return false;
}
它不是指针,但很简单。通过引用传递返回值,如果给它赋值,则返回true。
相关文章:
- c++使用foreach使数组为null
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 正在将对象指针数组初始化为NULL
- 为什么具有单独字符的字符数组不像字符串文字那样以 null 终止符结尾?
- STD :: Sort将数组指针设置为NULL
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- 如何在默认构造函数中将 char 数组初始化为 null
- 2D 数组内存分配 (malloc) 返回 NULL
- Node-ffi 绑定到 NULL 终止的 C 字符串数组,但得到“分段错误:11”
- C++如何将结构数组初始化为null,然后在while循环中检查该数组的元素是否为null
- 初始化数组中的每个变量以'0'与将它们全部初始化为 null 相同吗?
- 尝试用C 中的空地址(而非null)删除数组指针
- C :将文本文件的内容存储在2D数组中,作为字符串(用于NULL终结器的麻烦?)
- 在std::字符串或字符数组中间包含NULL字符的UPDATE
- 将数组中的元素设置为 0 或 NULL
- 正在初始化指向null的专用指针数组
- 将对象的数组设置为c 中的null
- 在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?
- C++字符数组null终止符位置