我遇到了一些奇怪的行为,我不确定该向哪里求助。
基本上,我有一组类,其中一个应该用另外两个类的实例来构造。我使用引用传递来分配资源,但第二次分配在我的计算机上崩溃了。我不明白为什么第二个作业崩溃但第一个作业正常。为了让这更令人困惑,我尝试在在线 cpp 编译器中重新创建问题,但它似乎在该环境中运行良好。
我模糊了类名并删除了一些似乎与此问题无关的方法。有人有什么想法吗?
#include <iostream>
using namespace std;
class Driver{};
class ITransmission{};
class ManualTransmission : public ITransmission {};
class Car
{
public:
Car(ITransmission &trans, Driver &driver);
private:
ITransmission *m_trans;
Driver *m_driver;
};
Car::Car(ITransmission &trans, Driver &driver)
{
*m_trans = trans;
*m_driver = driver; // <-- **** Crashes here!?!? ****
}
int main()
{
ITransmission *trans = new ManualTransmission();
Driver *driver = new Driver();
Car car(*trans, *driver);
return 0;
}
最佳答案
*m_trans
和 *m_drivers
只是指向其各自类型的指针。它们本身并不是物体。在您的复制构造函数中,您正在调用
*m_trans = trans
它会崩溃,因为m_trans
没有指向任何东西并且您正在取消引用它。
你想要的是,
m_trans = &trans
m_driver = &driver
这会将指针设置为指向您传入的对象的地址,而在您尝试分配给所指向的对象之前。
关于c++ - 为什么按引用传递会导致崩溃(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60270885/