在这个问题中,我问了"pimpl: shared_ptr or unique_ptr", 我已经被说服使用pimpl惯用语的正确方法是使用
所以,假设用户想要创建一个
那将导致一个指向我的实现的unique_ptr的shared_ptr。
如果我能实现以下内容,那就太好了:
unique_ptr
而不是shared_ptr
。它应该对用户表现为没有指针,而很明显shared_ptr
在复制时会引入别名,这绝对像指针一样作用。所以,假设用户想要创建一个
shared_ptr
到我的pimpl对象(如果他们实际上想要多个别名)。例如:shared_ptr<my_pimpl> p(new my_pimpl());
那将导致一个指向我的实现的unique_ptr的shared_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)行保持不变)。