这可能听起来像一个奇怪的问题,但我想知道是否可以编写一个类,例如实例..
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;
}
因为这意味着有人故意滥用其他东西。我更担心偶然的错误(例如悬挂引用/指针)。