分配给可以允许NULL成员的数组,而不使用堆?

时间:2011-12-13 17:41:34

标签: c++ null

对此有什么简单有效的答案吗?......除了“决定哪个更重要”之外,就是这样。

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

也许从C ++的角度来看,我的问题都是错的。也许我应该将这些视为会话槽,虽然填充了会话对象,但在给定会话引用连接的TCP套接字之前可能不一定可用。这与大多数动态语言不同,我可以简单地将会话槽指定为null,直到会话填充数组中的那个槽为止。

3 个答案:

答案 0 :(得分:12)

如果您想要一个具有可选语义的自动存储对象(即可能存在或可能不存在),您可以使用boost::optional

boost::optional<T>是一个可以包含零个或一个元素的容器。如果它为空,则不存储T对象,就像空向量不存储任何对象一样。事实上,您可以将boost::optional<T>视为std::vector<T>,其容量始终为1且无法增长。由于此所需的存储大小是固定的并且在编译时已知(sizeof(T)),因此boost::optional不需要任何动态分配。

答案 1 :(得分:1)

没有什么能阻止你继续使用指针。指针可以指向任何非临时对象,包括堆栈中的对象。

示例:

void func()
{
    MyObject obj;
    MyObject* p = 0;

    if(some_condition)
        p = &obj;

    ...
}

答案 2 :(得分:0)

tenfour's answer上推测,这段代码可行,实际上很常见:

bool function(int parameter, TYPE& return_val) {
    if (parameter > 7) {
        return_val = 7;
        return true;
    }
    return false;
}

它不是指针,但它很简单。通过引用传递返回值,如果为其赋值,则返回true。否则,返回false。