2

是否可以使用像其他变量一样std::queue的值来初始化 C++ ?NULL

像这样:

HANDLE variable = NULL; 

class Test
{
}

IE

std::queue<Test*> testQueue = NULL;

或者

testQueue.empty();

或类似的东西?

4

4 回答 4

8

如果你这样写:

std::queue<Test*> testQueue; //it is default initialized

那么这就足够了;无需将其设为指针并使用 NULL 对其进行初始化。

此外,您可以这样做:

if ( testQueue.empty()) 
{
    //testQueue is empty
}
于 2012-04-16T05:55:49.367 回答
2

如果您使用指向队列的指针,您当然可以将其初始化为空指针(但如果可能,您可能希望避免这种情况)。

如果您只是定义一个队列,您可以测试它是否为空(正如您所建议的,使用.empty())。

于 2012-04-16T05:56:23.367 回答
2

要直接回答您的问题,请不要使用空指针对其进行初始化。默认情况下,队列是空的,这就是您测试的内容(正如其他答案所建议的那样)。但是,我认为这里有一个比这更深的潜在问题,那就是在指针方面考虑太多了。

由于您使用的是容器,因此我建议您不要使用std::queue<Object *>. 相反,我建议尽可能使用std::queue<Object>(存储对象,而不是指针)。与其使用任何类型的空值来指示对象不处于有效状态,不如在构造函数中初始化值(因此所有对象都处于有效状态),然后您的所有对象std::queue都是有效的。在 C++ 中,这应该是您对如何使用对象的偏好:

  1. 如果需要处理对象的集合,直接在堆栈上创建对象或存储在容器中(最好是 STL 容器)
  2. 引用(例如,如果您将对象传递给函数并希望避免复制,但这里引用指的是通过创建的对象1
  3. 智能指针(这应该是代码中唯一new出现的时间)。这些应该谨慎使用,并且只有在您确定通过创建对象1不起作用时才使用。
  4. 一个普通的指针。这几乎不应该被使用。在我的大多数项目中,我不使用任何原始指针。在其余部分,我只将它们用作一种缓存机制,其中长时间计算确定我正在操作的对象,而空指针表示我尚未确定它。但是,我仍然没有使用“主”句柄作为指针来创建对象;指针指向我通过创建的对象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++.

于 2012-04-16T06:18:50.123 回答
1

队列是具有构造函数的 C++ 对象。您不需要将其初始化为默认值。它总是从一个空队列开始。.empty()只是检查它是否为空。.clear()如果需要,会删除其内容,但在新建的内容中,这是没有必要的。

于 2012-04-16T05:59:46.637 回答