1 c++ derived-class unique-ptr
有人可以向我解释为什么在这里执行函数 foo() 会导致 SEGFAULT 吗?当我将 D 类中的 unique_ptr 对象更改为包含 B 类对象而不是 A 时,一切正常。
class A
{
public:
virtual void function() = 0;
};
class B : public A
{
public:
void function()
{
std::cout << "works!!";
}
};
class D
{
public:
D(const std::unique_ptr<A>& arg): object(arg) {}
void foo()
{
object->function();
}
private:
const std::unique_ptr<A>& object;
};
int main()
{
std::unique_ptr<B> object = std::make_unique<B>();
D d(std::move(object));
d.foo();
}
Run Code Online (Sandbox Code Playgroud)
我很好奇这背后的逻辑是什么。
您传递对智能指针对象的引用。一旦d创建了该智能指针对象,该对象就会被销毁。这会给您留下无效的参考。当您尝试使用它时,您将出现未定义的行为。
而是按值传递指针对象,按值将其存储在对象中,然后将其移动到对象中:
class D
{
public:
D(std::unique_ptr<A> arg): object(std::move(arg)) {}
// ...
std::unique_ptr<A> object;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |