gpt4 book ai didi

c++ - 什么翻译单元拥有隐式定义的特殊成员函数?

转载 作者:太空狗 更新时间:2023-10-29 23:53:15 24 4
gpt4 key购买 nike

我在头文件中使用 boost::scoped_ptr 和前向声明:

//Bar.h
class Foo;

class Bar;
{

private:
boost::scoped_ptr<Foo> _foo;
};

我没有实现自己的析构函数,因为智能指针会完成这项工作。

我将这个头文件包含在多个翻译单元中,但并非所有翻译单元都包含 Foo 定义。尝试编译时出现错误,提示 scoped_ptr 正在删除指向不完整类型 Foo 的指针。

如果我在 Bar.h 中声明一个空析构函数并在 Bar.cpp 中实现它,一切都会很容易修复。

但是,如果在头文件中实现析构函数,我会得到同样的错误。

所以问题是:隐式定义的方法在哪些翻译单元中运行?

最佳答案

问题的表述不正确。你想知道的是

哪个翻译单元包含隐式定义的特殊成员函数?

[那是一口]。答案就在每个使用(odr-使用)它们的翻译单元中。

对于您的特定用例,并且因为 scoped_ptr 析构函数需要完整的类型,您别无选择,只能声明 Bar 的析构函数,并定义它即使在具有 Foo 完整定义的翻译单元中为空。

或者,您可以使用没有该限制的不同类型的智能指针。

关于c++ - 什么翻译单元拥有隐式定义的特殊成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11934897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com