在C++中工作时遇到了一个问题。我已经在SO以及其他地方尝试了几个答案(如:returning an abstract class from a function和How do I make an abstract class properly return a concrete instance of another abstract class?),但我仍然遇到麻烦 - 这些似乎并不完全符合...如何使用C++返回抽象类
我有一个抽象类,派生类:
class AbstractClass {
virtual std::string virtMethod() = 0;
}
class Derived : public AbstractClass {
std::string virtMethod();
}
而且,我这我试图让抽象类的返回类型(当然,返回派生类的实例),一个单独的类。
我用指针和引用的尝试:
AbstractClass* methodFromOtherClass() {
if (somethingIsTrue) {
Derived d = Derived();
return &d;
}
SomeOtherDerived s = SomeOtherDerived();
return &s;
}
其中,在Xcode中,给我的警告:
与局部变量 'd' 相关的堆栈内存地址返回
我试着创建一个静态的Derived对象,然后无法在调用我的“methodFromOtherClass()”的方法中销毁它。
我也试过我的手在智能指针(尽管有人可能会指出我的明显他们的误用):
std::unique_ptr<AbstractClass> methodFromOtherClass() {
if (somethingIsTrue) {
Derived d = Derived();
return std::unique_ptr<AstractClass>(&d);
}
SomeOtherDerived s = SomeOtherDerived();
return std::unique_ptr<AstractClass>(&s);
}
以上,或许并不奇怪,让我有段错误。
我习惯于能够在Java中轻松完成这项任务......任何帮助将不胜感激。目前C++对我来说不是一个非常强大的语言,所以它可能是我忽略的非常基本的东西。
你最后的尝试几乎是正确的。 'return std :: make_unique();'。 –
nwp