是否可以将类实例限制为仅用作临时实例?

And*_*hko 9 c++ c++11

是否可以将类实例限制为仅用作右值(例如临时值)?

例如,我有一个类,Wrapper其构造函数接受A const&并在其成员中保存此引用.这是危险的,因为Wrapper实例的生命周期不能超过A实例的生命周期,但是如果Wrapper是的话,那就没问题了temporary.

Pup*_*ppy 5

我认为即使想要这样做也是一个非常糟糕的设计的标志。

但是,您可以将所有构造函数设为私有,并创建一个返回右值的友元函数。这应该够了吧。


peo*_*oro 4

我认为这不安全:

const A &a = YourClass( tmp );
Run Code Online (Sandbox Code Playgroud)

YourClass在本例中,是您正在寻找的仅允许临时实例的类,tmp是您传递给构造函数的临时值。
有可能(即:安全、定义的行为)对临时变量(即:a)有一个常量引用,但临时变量本身(例如 的实例YourClass)拥有一个tmp在计算该表达式后不再有效的引用。