【问题标题】:Using a unique pointer to call a function crashes my program使用唯一指针调用函数会使我的程序崩溃
【发布时间】:2020-04-06 10:54:09
【问题描述】:

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

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

【问题讨论】:

  • 在未初始化的指针上调用成员函数很容易导致未定义的行为。

标签: c++ c++11 pointers inheritance smart-pointers


【解决方案1】:

指针pdefault-initialized 并没有指向任何东西。

构造一个不拥有任何东西的std::unique_ptr。值初始化存储的指针和存储的删除器。

Dereference 通向 UB,一切皆有可能。

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

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

std::unique_ptr<Stuff> p = std::make_unique<Stuff>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多