在这个问题中,我问了“pimpl:shared_ptr 或 unique_ptr”,我确信 pimpl 习语的正确用法是使用 a unique_ptr
,而不是 a shared_ptr
。它应该对用户起作用,就好像根本没有指针一样,而很明显,shared_ptr
在复制时引入了别名,这绝对像一个指针。
因此,假设用户想要为shared_ptr
我的 pimpl 对象创建一个(假设他们是否真的想要多个别名)。例如:
shared_ptr<my_pimpl> p(new my_pimpl());
这将导致shared_ptr
指向unique_ptr
我的实现。
如果我能实现以下目标,那就太好了:
my_pimpl x; // (1)
shared_ptr<my_pimpl> p(new my_pimpl()); // (2) Pointer to pointer here.
x.f(); // (3)
p->f(); // (4)
但是以某种方式摆脱了指向指针的指针,同时仍然保持 pimpl 的实现隐藏。
任何想法如何实现这一点(我很高兴更改第 (2) 行和显然my_pimpl
,但希望第 (3) 和 (4) 行保持不变)。