我有一个类,其所有默认构造函数都超出了我的控制范围。我需要避免在某些情况下构建它们,而在其他情况下则不然。我能做些什么吗?
模式是这样的:
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
};
问题是 X1
到 XN
完全超出了我的控制范围。 A
类只是将 x1
到 xn
打包在一起的类。我想有条件地在 B
中创建 A
的实例。现在的问题是,X1
到 XN
的默认构造函数会执行某些在某些情况下需要避免的操作,而在其他情况下则不需要。因此,无论我是否构造 A
,B
都会尝试使用 A
的默认构造函数创建一个,这反过来又会启动默认值X1
到 XN
的构造函数。这是我需要避免的。
我目前正在使用宏来解决这个问题,但想看看是否有更好的解决方案。
最佳答案
正如康拉德·鲁道夫指出的那样:
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/