我需要使用 VS2012 编译器并且有:
virtual std::unique_ptr<MyType> pass_through(std::unique_ptr<MyType> instance) override { return std::unique_ptr<MyType>(nullptr); };
该定义仅作为存根存在于项目中,并且没有 MyType 析构函数,我收到以下错误:
错误 LNK2001:未解析的外部符号“公共:__thiscall MyType::~MyType(void)”(??1MyType@@QAE@XZ)
所以我创建了一个定义:
MyType::~MyType() {}
这就是问题所在,我不想让上面的函数通过构建而混淆定义。那么有没有办法不需要指定析构函数定义并且仍然具有该 pass_through 方法的有效实现?
也许我可以以某种方式更改方法的签名,或者它的逻辑在主要实现中基本相同,它执行以下操作:
std::unique_ptr<MyType> pass_through(std::unique_ptr<MyType> instance)
{
if (!instance) {
instance= std::unique_ptr<MyType>(new MyType(/*arguments*/));
}
instance->something();
return instance;
}
顺便说一句,我看到类似的问题被否决/关闭,但仍然在建议中我没有看到任何相关的答案,而且我之前也使用过谷歌,但仍然没有命中 => 也许以某种方式用好的答案来推广相关问题,如果有的话?