C++ 避免构造对象

标签 c++ constructor

我有一个类,其所有默认构造函数都超出了我的控制范围。我需要避免在某些情况下构建它们,而在其他情况下则不然。我能做些什么吗?

模式是这样的:

class A
{
public: 
    //ctor + dtor + methods
    A(); 
    ~A();
    // Data members beyond my control
    X1 x1;
    X2 x2;
    ...
    XN xn;
};

class B
{
public:
    B()
    {}

    // Data members
    A a;   // This instance of A is the issue
};

问题是 X1XN 完全超出了我的控制范围。 A 类只是将 x1xn 打包在一起的类。我想有条件地在 B 中创建 A 的实例。现在的问题是,X1XN 的默认构造函数会执行某些在某些情况下需要避免的操作,而在其他情况下则不需要。因此,无论我是否构造 AB 都会尝试使用 A 的默认构造函数创建一个,这反过来又会启动默认值X1XN 的构造函数。这是我需要避免的。

我目前正在使用宏来解决这个问题,但想看看是否有更好的解决方案。

最佳答案

正如康拉德·鲁道夫指出的那样:

class B
{
public:
  B(bool create = false)
  {
    a = (create ? new A : NULL);
  }
  ~B()
  {
    delete a;
  }
private:
  A* a;
};

关于C++ 避免构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806254/

相关文章:

c++ - 必须在构造函数基/成员中初始化?

c++ - 关于STL中Vector的一些问题

c++ - 对`i2c_smbus_read_word_data(int, unsigned char) 的 undefined reference

c++ - 将 Matrix 作为指向函数的指针传递

java - 当调用构造函数时会发生什么(在这种情况下概念很清晰)?

c++ - 静态分配的构造函数和析构函数顺序

c++ - 如何检查模板类型参数是字符类型还是字符串类型?

c++ - QStandardItemModel Qt

c++ - Unresolved external 问题 [构造函数]

具有右值引用的 C++ 构造函数