对此有什么简单有效的答案吗?......除了“决定哪个更重要”之外,就是这样。
让我详细说明一下。我想要一个固定大小的数组。它表示可以为套接字服务器打开以接受客户端的会话槽。这些数量有限(目前有四个)。
也许从C ++的角度来看,我的问题都是错的。也许我应该将这些视为会话槽,虽然填充了会话对象,但在给定会话引用连接的TCP套接字之前可能不一定可用。这与大多数动态语言不同,我可以简单地将会话槽指定为null,直到会话填充数组中的那个槽为止。
答案 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。