16得票1回答
为什么 = default 成员初始化器要求实例化 unique_ptr 析构函数,而 {} 则不需要?

这是这个问题的跟进: Does PIMPL idiom actually work using std::unique_ptr? 完整的示例使用了多个文件,因此出于本问题的目的,我将在此处减少它。完整的有效示例在这里:https://wandbox.org/permlink/AepAJYkbR...

12得票3回答
自动化C++类的pimpl -- 有简单的方法吗?

Pimpl在很多C++代码中是样板代码的来源。它们似乎是一种可以通过宏、模板和可能一些外部工具帮助来解决的东西,但我不确定最简单的方法是什么。我看到了一些模板可以帮助完成一些工作,但不多——你仍然需要为要包装的类的每个方法编写转发函数。有没有更简单的方法? 我想象一种作为 make 过程的一...

12得票3回答
将委派转移到私有部分

有时候,C++ 的隐私概念真让我感到困惑 :-) class Foo { struct Bar; Bar* p; public: Bar* operator->() const { return p; } }; struc...

12得票1回答
Java编程惯用语:私有实现类

我在一些代码中发现了这样的结构。 使用一个私有静态类来实现A是否有益?这让我想起了C++中的Pimpl习惯用法。在Java中使用Pimpl习惯用法是否有益?public abstract class A { public void doStuff(); public sta...

12得票2回答
"d"在"d-pointer"中代表什么?

Qt在其开发过程中大量使用PIMPL技术:https://wiki.qt.io/D-Pointer 据我所读(这里):"“D”指针这个名字源于 Trolltech 的 Arnt Gulbrandsen,他最先将该技术引入 Qt 中,使其成为维护二进制兼容性的 C++ GUI 库之一, 即使在...

11得票3回答
使用d指针的优缺点是什么?

d指针在Qt中被广泛使用,它们是pimpl习惯用法的一种实现。我了解pimpl习惯用法的优缺点,但我错过了d指针实现的优势。这里和这里是d指针的示例。 只使用它不更容易吗?class MyClassPrivate; class MyClass { // interface methods ...

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

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

10得票2回答
用最少的代码实现pImpl模式

有什么技巧可以用来最小化实现pImpl类的工作量? 头文件:class Foo { struct Impl; boost::scoped_ptr<Impl> self; public: Foo(int arg); ~Foo(); // Pu...

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

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

10得票1回答
智能指针的Pimpl - 为什么需要构造函数/析构函数

让我们考虑以下示例(使用c++11) A.hpp:#include <memory> class A { public: //A(); //~A(); private: struct AImpl; std::unique_ptr<A...