我想知道是否有办法强制使用参考左值?假设以下情形:
class Foo
{
public:
Foo()
{
std::cout << "Foo ctor()" << std::endl;
}
~Foo()
{
std::cout << "Foo dtor()" << std::endl;
}
};
class FooFactory
{
public:
Foo& create()
{
m_foo = new Foo();
return *m_foo;
}
void destroy()
{
delete m_foo;
}
private:
Foo* m_foo;
};
int main()
{
FooFactory factory;
Foo& foo = factory.create();
factory.destroy();
return 0;
}
此代码将打印出以下内容:
Foo ctor()
Foo dtor()
现在,如果我像这样更改main()
函数:
int main()
{
FooFactory factory;
Foo foo = factory.create();
factory.destroy();
return 0;
}
程序输出:
Foo ctor()
Foo dtor()
Foo dtor()
AFAIK,这是因为在main()
对象的foo
中创建了一个副本,当main()
超出范围时会被销毁。因此,问题是:是否可以强制使用Foo foo&
代替Foo foo
,以便不会制作副本?
答案 0 :(得分:4)
如果您有C ++ 11编译器,则显式删除Foo
Foo(Foo const&) = delete;
Foo& operator=(Foo const&) = delete;
对于C ++ 11之前的编译器,声明两个private
并将它们保留为未定义
private:
Foo(Foo const&);
Foo& operator=(Foo const&);