我有一个对象的两个构造函数,它们使用两组不同的数据。
myclass myobject(set 1);
myclass myobject(set 2);
set 1
和 set 2
是不同的类型。
我想使用构造函数 1 或构造函数 2 创建一个名为 myobject 的 myclass 对象,具体取决于此时可用的参数集,然后在 if 语句之外使用 myobject。
if(set1)
myclass myobject(set 1);
else
myclass myobject(set 2);
myobject.operation();
谁能告诉我这样做的好方法?
最佳答案
如果默认构造和复制(或移动)分配很便宜,只需使用:
myclass myobject;
if (set1)
myobject = myclass(1, 2);
else
myobject = myclass(3);
myobject.operation();
如果在堆上分配东西是可以接受的,使用指针:
std::unique_ptr<myclass> myobject;
// const std::auto_ptr<myclass> in C++03 (it's fine as long as you keep it unique)
if (set1)
myobject.reset(new myclass(1, 2));
else
myobject.reset(new myclass(3));
myobject->operation();
如果您必须在堆栈上分配它,除了使用 placement new(或更改构造函数以接受这两种可能性)之外,我无论如何都看不到。
#include <new>
char myobject_buffer[sizeof(myclass)];
myclass* ptr;
if (set1)
ptr = new (myobject_buffer) myclass(1, 2);
else
ptr = new (myobject_buffer) myclass(3);
ptr->operation();
...
ptr->~myclass(); // <-- use RAII to call this for exception safety
关于c++ - 根据可用的参数使用一个或另一个重载的创建者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226221/