小编Adv*_*ent的帖子

动态创建作为默认函数参数传递的派生类对象的最佳和最安全的方法是什么?

我有一堂课

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。知道是什么原因造成的或如何更好地解决它吗?

提前致谢

c++ smart-pointers default-arguments

-1
推荐指数
1
解决办法
68
查看次数

标签 统计

c++ ×1

default-arguments ×1

smart-pointers ×1