【发布时间】:2014-05-31 11:39:12
【问题描述】:
我有一个通过谷歌测试套件彻底测试过的库。我试图保持它“pimpl”干净,但我遇到了一个我无法弄清楚的段错误。
相关代码:
Interface.h:
class Interface{
public:
Interface();
void Function(const int argument);
private:
std::unique_ptr<Implementation> Implement;
std::unique_ptr<DependencyInjection> Injection1, Injection2;
};
接口.cpp:
Interface::Interface()
: Injection1(new DependencyInjection()),
Injection2(new DependencyInjection()),
Implement(new Implementation(*Injection1, *Injection2)) {}
void Interface::Function(const int argument){ Implement->Function(argument); }
实施.h:
class Implementation{
public:
Implementation(AbstractInjection &injection1, AbstractInjection &injection2);
void Function(const int argument);
private:
AbstractInjection Injection1, Injection2;
};
实施.cpp
Implementation::Implementation(AbstractInjection &injection1, AbstractInjection &injection2)
: Injection1(injection1),
Injection2(injection2) {}
void Implementation::Function(const int argument){
injection1.Function(argument); } // code from here out is all well tested and works
因此,当我创建接口并调用 Interface.Function() 时,代码会在尝试评估 Implementation.Function() 时出现段错误。我已经通过我能想到的一切运行 gdb,所有指针都是非空的。
如果我只是创建一个看起来像这样的测试
std::unique_ptr<DependencyInjection1> injection1(new DependencyInjection());
std::unique_ptr<DependencyInjection2> injection2(new DependencyInjection());
std::unique_ptr<Implementation> implement(new Implementation(*injection1, *injection2));
implement->Function(0);
代码工作正常,没有段错误
但如果我创建一个类似的测试
Interface iface;
iface.Function(0);
它会出现段错误。
我对整个 unique_ptr 事情并不陌生,但我怀疑这不是更大的问题。这可能是一个红鲱鱼,我不知道。
【问题讨论】:
标签: c++ segmentation-fault unique-ptr pimpl-idiom