如何编写一个无法离开范围的类?

时间:2017-05-23 20:13:54

标签: c++ reference operator-overloading

这可能听起来像一个奇怪的问题,但我想知道是否可以编写一个类,例如实例..

  • 只能通过某些Creator
  • 创建
  • 无法复制,对实例的引用不能离开范围

这就是我试过的......

template <typename T>
struct Creator {
        T create(){ return T();}
};   

struct Foo {
    private:
        friend class Creator<Foo>;
        Foo(){}
        void operator&();
        Foo(Foo const&);

};

//Foo* foo(){ return &Creator<Foo>().create();}    // compiler error
//Foo foo(){ return Creator<Foo>().create();}      // compiler error
const Foo& foo(){ return Creator<Foo>().create();} // >>>> BOOM <<<<

也许解决方案很简单,我只是不明白,但我不知道如何阻止引用绑定到实例(或者甚至可能)。我甚至没有开始考虑搬家......

是否可以禁用实例(以任何方式)离开创建它们的范围?

PS:该类将被用作临时类。因此,我并不太关心这样的事情:

const Foo& foo(
    static Foo f;
    return f;
}

因为这意味着有人故意滥用其他东西。我更担心偶然的错误(例如悬挂引用/指针)。

0 个答案:

没有答案