我有以下代码:
class A{
public:
virtual do_something() = 0;
}
class B : public A{
public:
virtual do_something() override;
}
void use_a(A *a){
if (a){
a->do_something();
delete a;
}
}
use_a( new B() );
如何将其翻译成引用文献?
注意 do_something()
不是 const
方法。
我认为它可以是这样的:
void use_a(A &&a){
a->do_something();
}
use_a( B() );
但有人告诉我这是不好的风格,必须避免。
最佳答案
右值引用具有移动语义。将 B
移动为 A
时效果不佳。
使用左值引用:
void use_a(A &a);
B b;
use_a(b);
或模板:
template <typename T>
void use_a(T &&a);
或者,如果它不需要是一个引用,一个智能指针:
void use_a(std::unique_ptr<A> a);
void use_a(std::shared_ptr<A> a);
关于C++从动态分配转换为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31101337/