0

假设我有这样的代码:

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)?

4

3 回答 3

1

有什么理由你不能只修改你的 MakeD() 方法来返回一个新的 D 而不是传递一个指向 D 的指针?

IE。

D* MakeD(int params, int* status_out);

...

b = MakeD(params, &status);

还是 MakeD() 方法是其他人 API 的一部分?

于 2012-11-19T23:58:47.170 回答
0

就像是

B *b = use_d ? new D(params) : new <something else>; 

应该管用。我假设其他东西可能是一个B对象(可能是使用不同的参数构造的?)。它需要是B或派生自B代码的类才能工作。

而且,一如既往,不要使用 raw B*,而是使用

std::unique_ptr<B> ptr( use_d ? new D(params) : new <something else> );
于 2012-11-20T00:04:10.993 回答
0

为什么不使用基本的 C++ 特性,例如类构造函数和多态性:B* b = new D(params);

于 2012-11-20T00:00:26.707 回答