空的deque与未使用的指向deque的指针

Empty deque versus unused pointer to deque

本文关键字:deque 指针 未使用 空的      更新时间:2023-10-16

我有一个类,如果参数传递给构造函数,有时需要使用类型为deque<int>的成员,如果不是,则不使用该成员。怎样才能有效而有风格地处理这种情况呢?

我还想提一下,该类的对象应该能够传递给相同的函数,尽管在相同的容器中删除存储的能力是好的。我从来没有做过多态性(正如在评论中所暗示的那样),但我想我将阅读它并尝试一下。

我的两个想法:
-保持成员变量为deque<int>,我假设它将被存储为空deque<int>
—使用指向deque<int>的指针,只在需要时调用new

还可以在初始化deque成员时设置指向该成员的指针:

deque<int> queue_;
deque<int> *ptr_;
ptr_(NULL); // not used
ptr_(&queue_);

然而,在速度方面,如果你不经常使用队列,new可能会更快,因为默认情况下你所做的一切都是在指针中设置NULL。如果使用50/50,那么我的方法可能是最快的方法之一,因为您不需要处理更多的堆。

如果性能是一个问题,我可能会使用选项1和"is_initialized"布尔标志:

class A
{
  bool is_initialized;    
  public:
     A(bool used=false):is_initialized(used)  
     {
     }; 
  private:
     deque<int> _d;
};

是的,当不使用deque时,选项2可以节省一点内存,但是如果使用它,就会产生指针解引用的开销。

您正在寻找的正是boost::optional<deque<int>>。没有什么比这更清楚、更正确地说明你的意图了。