gpt4 book ai didi

c++ - PIMPL,POD,实现类的可见性,它的析构函数会被调用吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:41 29 4
gpt4 key购买 nike

维基百科声称,在 article on opaque pointers , 那

The d-pointer is the only private data member of the class and points to an instance of a struct (which must be a POD since its destructor is not visible)

这在 PIMPL 中不是必需的,只是维基百科通常是特殊的,不是吗?

我将缺少 d 指针标记作为我问题的答案,但希望有人可以为维基百科做出贡献和/或澄清一些事情。或者只是说维基百科很糟糕,最后的手段等等:)

我的问题是,当在 cpp 实现文件中完全声明和定义时,嵌套类的方法有多可见?它的析构函数是否会按预期调用(包含类将在其析构函数中对其调用 delete)?

_编辑_固定版本,http://en.wikipedia.org/wiki/Opaque_pointer

最佳答案

PIMPL 是一个令人作呕的习语,我得出的结论是它更像是一种反模式。

但是,如果您坚持要使用它,您可以在实现文件中简单地将析构函数定义为空,以充分利用您希望用来自动析构非 POD 实现的任何智能指针。

class Impl;
class Object {
std::unique_ptr<Impl> impl;
public:
//...
~Object();
};

#include "Impl.h"
// in cpp
Object::~Object() {}

这个快速代码示例清楚地把维基百科定义为完全错误的——在实现文件中简单地定义析构函数以使用你想要的任何析构函数,甚至是需要完整定义的智能指针是完全可能的。

关于c++ - PIMPL,POD,实现类的可见性,它的析构函数会被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160232/

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