说我有这样的代码:
class B {}
class D : class B {}
void MakeD(int params, D** out, int* status_out);
今天我称之为:
B* b;
if (use_d) {
D* d;
MakeD(params, &d, &status)
b = d;
} else...
是否有更简洁的方法来避免单独的'd'对象,但不会丢失现有的类型安全(即没有reinterpret_cast)?
答案 0 :(得分:1)
有什么理由你不能修改你的MakeD()方法来返回一个新的D而不是传入指向D的指针?
即
D* MakeD(int params, int* status_out);
...
b = MakeD(params, &status);
或者MakeD()方法是别人API的一部分吗?
答案 1 :(得分:0)
为什么不使用基本的C ++特性,例如类构造函数和多态:B* b = new D(params);
答案 2 :(得分:0)
像
这样的东西B *b = use_d ? new D(params) : new <something else>;
应该有效。我假设其他东西可能是B
对象(可能使用不同的参数构建?)。它必须是B
或派生自B
的类才能使代码生效。
并且,与往常一样,不要使用原始B*
,而是使用
std::unique_ptr<B> ptr( use_d ? new D(params) : new <something else> );