示例:
class Bar;
class Foo
{
public:
Foo(const Bar& bar) : mBar(&bar) {}
/* Other methods use mBar. */
private:
const Bar* mBar;
};
因此,目标是存储指向某个外部对象的const指针,而不是存储外部对象内容的副本。
Foo(const Bar& bar)
Foo(const Bar&&) = delete
来防止这种情况。但是,这并不是万无一失的,因为您仍然可以通过接受const引用并返回const引用的函数来临时走私。例如Foo afoo(std::min(Bar{}, anotherBar));
。Foo(const Bar* bar)
Foo afoo(&std::min(Bar{}, anotherBar));
以上哪个是首选,为什么?还是有没有更好的方法来解决上述问题呢?
答案 0 :(得分:1)
您可以接受::std::reference_wrapper<Bar>
,它将通过传递右值来处理情况,并提示您打算复制包装器而不是对象。