Adv*_*ent -1 c++ smart-pointers default-arguments
我有一堂课
class Base {
public:
virtual ~Base() {}
virtual string returnString() = 0;
};
class B : public A {
public:
string returnString() { return "string"; }
}
class C : public A {
public:
string returnString() { return ""; }
}
Run Code Online (Sandbox Code Playgroud)
和功能
string returnStringFunction(...);
Run Code Online (Sandbox Code Playgroud)
我希望能够传递 C 类型的对象,但默认情况下,我希望此函数使用动态创建的 B 类型对象。
我记得使用过这样的东西:
string returnStringFunction(const A& a = *std::make_unique<B>())
Run Code Online (Sandbox Code Playgroud)
或者
string returnStringFunction(const std::unique_ptr<A> a = std::make_unique<B>())
Run Code Online (Sandbox Code Playgroud)
函数体示例:
string returnStringFunction(...) {
return a->returnString();
}
Run Code Online (Sandbox Code Playgroud)
但是这两个解决方案即使它们通常在我的“沙盒”环境中编译和工作,它们也会在工作区上生成SIGFAULT。知道是什么原因造成的或如何更好地解决它吗?
提前致谢
正如评论中提到的,const std::unique_ptr<A> a = std::make_unique<B>()应该没问题,而另一个则不然。然而,一般来说,默认参数在 C++ 中只是二等公民。如果没有什么反对的话,我宁愿重载该函数。
如果您希望函数可以带或不带参数调用,您可以提供两个重载:
string returnStringFunction(const Base&);
string returnStringFunction() {
B b;
returnStringFunction(b);
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么你会在这里动态分配B,但如果你愿意的话可以。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |