使用唯一指针调用函数会使我的程序崩溃

Jr1*_*194 1 c++ inheritance pointers smart-pointers c++11

我制作了一个非常简单的程序来尝试将唯一指针和继承融合在一起。但是,它最终以退出代码 11 崩溃,我不知道为什么。任何人都可以解释崩溃的原因吗?

//Counter Class, Base class
class Counter {
   public:
    virtual int addStuff(int& x)=0;
  };
Run Code Online (Sandbox Code Playgroud)
//Derived Class, child class of Counter
class Stuff:public Counter {
 public:
  virtual int addStuff(int& x) override;
};
Run Code Online (Sandbox Code Playgroud)
//Main function using unique pointers to call addStuff from Stuff class
int main() {
  int x = 12;
  std::unique_ptr<Stuff> p;
  p->addStuff(x);
}
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

指针p默认初始化的,不指向任何内容。

构造一个std::unique_ptr什么都不拥有的。值初始化存储的指针和存储的删除器。

取消引用它会导致 UB,一切皆有可能。

行为是未定义的,如果 get() == nullptr

你应该p指向一个有效的对象,例如

std::unique_ptr<Stuff> p = std::make_unique<Stuff>();
Run Code Online (Sandbox Code Playgroud)