赋值给允许NULL成员的数组,而不使用堆

Assign to array that can allow NULL members, without using the heap?

本文关键字:数组 NULL 成员 赋值      更新时间:2023-10-16

对此有什么简单有效的答案吗?除了"决定哪一个更重要",那就是。

让我详细说明。我想要一个固定大小的数组。它表示可以为套接字服务器打开以接受客户端的会话槽。这些项目的数量有限(目前只有四个)。

也许从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。