是否可以使用像其他变量一样std::queue
的值来初始化 C++ ?NULL
像这样:
HANDLE variable = NULL;
class Test
{
}
IE
std::queue<Test*> testQueue = NULL;
或者
testQueue.empty();
或类似的东西?
是否可以使用像其他变量一样std::queue
的值来初始化 C++ ?NULL
像这样:
HANDLE variable = NULL;
class Test
{
}
IE
std::queue<Test*> testQueue = NULL;
或者
testQueue.empty();
或类似的东西?
如果你这样写:
std::queue<Test*> testQueue; //it is default initialized
那么这就足够了;无需将其设为指针并使用 NULL 对其进行初始化。
此外,您可以这样做:
if ( testQueue.empty())
{
//testQueue is empty
}
如果您使用指向队列的指针,您当然可以将其初始化为空指针(但如果可能,您可能希望避免这种情况)。
如果您只是定义一个队列,您可以测试它是否为空(正如您所建议的,使用.empty()
)。
要直接回答您的问题,请不要使用空指针对其进行初始化。默认情况下,队列是空的,这就是您测试的内容(正如其他答案所建议的那样)。但是,我认为这里有一个比这更深的潜在问题,那就是在指针方面考虑太多了。
由于您使用的是容器,因此我建议您不要使用std::queue<Object *>
. 相反,我建议尽可能使用std::queue<Object>
(存储对象,而不是指针)。与其使用任何类型的空值来指示对象不处于有效状态,不如在构造函数中初始化值(因此所有对象都处于有效状态),然后您的所有对象std::queue
都是有效的。在 C++ 中,这应该是您对如何使用对象的偏好:
1
)new
出现的时间)。这些应该谨慎使用,并且只有在您确定通过创建对象1
不起作用时才使用。1
。When determining what to store in your containers, you should also follow the above (prefer collections of objects first, then references, then smart pointers, then finally raw pointers).
Pointers may be common in Java, where most variables are created on the heap (or in C++ parlance, from the free store), and they may be somewhat common in C, where the STL, references, and smart pointers don't exist, but they do not have very much place in modern C++.
队列是具有构造函数的 C++ 对象。您不需要将其初始化为默认值。它总是从一个空队列开始。.empty()
只是检查它是否为空。.clear()
如果需要,会删除其内容,但在新建的内容中,这是没有必要的。