34得票7回答
不使用动态内存分配的Pimpl惯用语

我们希望在项目的某些部分使用pimpl模式。这些部分也恰好是禁止动态内存分配的部分,而这个决策不在我们的控制范围之内。 所以我的问题是,有没有一种干净而漂亮的实现pimpl模式的方法,而不需要动态内存分配? 编辑 以下是其他限制:嵌入式平台、标准C++98、无外部库、无模板。

19得票6回答
C++是否可以避免使用pimpl技巧?

据我所知,pimpl模式的存在仅仅是因为C++强制要求你将所有私有类成员放在头文件中。如果头文件只包含公共接口,理论上,类实现的任何更改都不会导致整个程序需要重新编译。 我想知道的是,为什么C++没有设计允许这样的便利。为什么它要求类的私有部分完全显示在头文件中(无意冒犯)?

36得票2回答
为什么加一个空析构函数可以解决“error: invalid application of 'sizeof' to an incomplete type using unique_ptr”问题?

我正在将类STFT实现为Pimpl模式。在头文件中加入以下代码后可以通过编译: class STFT; // pimpl off to prevent point name clash class Whatever { private: STFT* stft; 并且在实现中:#in...

26得票2回答
Pimpl - 为什么可以在不完整的类型上调用make_unique函数

为什么make_unique调用可以编译通过?难道make_unique不要求其模板参数为完整类型吗?struct F; int main() { std::make_unique<F>(); } struct F {}; 这个问题起源于我对我的PIMPL实现的“问题”: ...

9得票1回答
Pimpl技法比始终使用unique_ptr作为成员变量更好吗?

在我的工作场所,我们有这样的约定:几乎每个类(有极少数例外)都是使用 unique_ptr、原始指针或引用作为成员变量实现的。 这是由于编译时间的原因:以这种方式,您只需要在头文件中对类进行前向声明,并且您只需要在 cpp 中包含文件。此外,如果您更改了包含 unique_ptr 的类的 ....

11得票4回答
使用指针隐藏实现细节(Pimpl惯用法)

有没有办法去实现以下功能: x.hpp - 此文件被许多其他类所包含。 class x_impl; //forward declare class x { public: //methods... private: x_impl* impl_...

10得票2回答
在调试器中查看来自DLL的pimpl

我正在使用Pimpl技术隐藏接口的实现细节,以便在一定程度上保护ABI。我的开发经验大部分是在Linux上,对于MS的内部情况并不是很熟悉。 我无法从调试器检查窗口中查看Pimpl的内部。我的类型仅展开到指向impl的原始指针(它使用智能指针)。我尝试导出符号,但似乎不起作用。我想我实际上要...

69得票2回答
如何使用unique_ptr实现pimpl?

这是我在尝试使用unique_ptr来实现pimpl时遇到的问题。我选择unique_ptr,因为我希望类拥有指针 - 我希望pimpl指针和类的生命周期相同。 无论如何,以下是相关的头文件:#ifndef HELP #define HELP 1 #include <memory&gt...

54得票4回答
我应该使用shared_ptr还是unique_ptr?

我正在使用pimpl方法创建一些对象,但我不确定是否应该使用std::shared_ptr还是std::unique_ptr。 我知道std::unique_ptr更高效,但对我来说这并不是很重要,因为这些对象本身就比较庞大,所以std::shared_ptr相对于std::unique_p...

7得票3回答
C++:自动减少编译时依赖的工具

阅读完Pimpl惯用法后我感到非常震惊! 难道没有一种工具可以检查.h/.cpp文件,并推断哪些依赖项可以免除吗?