是否可以像其他变量一样初始化具有std::queue
值的C ++ NULL
?
像这样:
HANDLE variable = NULL;
class Test
{
}
即
std::queue<Test*> testQueue = NULL;
或
testQueue.empty();
或类似的东西?
答案 0 :(得分:7)
如果你这样写:
std::queue<Test*> testQueue; //it is default initialized
那么这就足够了;不需要指针并用NULL初始化它。
另外,你可以这样做:
if ( testQueue.empty())
{
//testQueue is empty
}
答案 1 :(得分:2)
如果您使用指向队列的指针,您当然可以将其初始化为空指针(但如果可能的话,您可能希望避免这种情况)。
如果你只是定义一个队列,你可以测试它是否为空(正如你所建议的那样.empty()
)。
答案 2 :(得分:2)
要直接回答您的问题,请不要使用空指针初始化它。默认情况下,队列为空,这就是您测试的内容(如其他答案所示)。但是,我认为这里存在一个潜在的问题,比这更深入一点,就指针来说太多了。
由于您使用的是容器,我建议不要使用std::queue<Object *>
。相反,我建议尽可能使用std::queue<Object>
(存储对象,而不是指针)。而不是使用任何类型的空值来指示对象不处于有效状态,只需初始化构造函数中的值(因此所有对象都处于有效状态),然后std::queue
中的所有对象都有效。在C ++中,这应该是您对如何使用对象的偏好:
1
创建的对象)new
出现的唯一时间)。这些应该谨慎使用,并且只有当您确定通过1
创建对象时才会起作用。1
创建的对象。在确定要在容器中存储的内容时,您还应该遵循上述内容(首先选择对象集合,然后是引用,然后是智能指针,最后是原始指针)。
指针可能在Java中很常见,其中大多数变量是在堆上创建的(或者用C ++的说法,来自免费商店),它们在C中可能有些常见,其中STL,引用和智能指针不在存在,但它们在现代C ++中没有太多的位置。
答案 3 :(得分:1)
队列是带有构造函数的C ++对象。您无需将其初始化为默认值。它始终以空队列开头。 .empty()
只是检查它是否为空。如果需要,.clear()
会删除其内容,但在新构建的内容中,这不是必需的。