2

如果将参数传递给构造函数,我有一个类有时需要使用类型成员,deque<int>如果不是,则不会使用该成员。有效和风格化地处理这种情况的最佳方法是什么?

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

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

4

3 回答 3

0

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

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

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

于 2013-05-26T03:21:49.803 回答
0

您还可以在初始化它以供使用时设置指向双端队列成员的指针:

deque<int> queue_;
deque<int> *ptr_;

ptr_(NULL); // not used

ptr_(&queue_);

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

于 2013-05-26T02:59:46.543 回答
0

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

于 2013-05-26T05:08:09.373 回答