C++从动态分配转换为引用

标签 c++ pointers c++11 reference rvalue

我有以下代码:

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/

相关文章:

c++ - 对 C++ 基类布局感到困惑

字符数组和二维数组指针问题

c++ - 使用 C++14 的具有多个返回类型的 decltype(auto)

c++ - make 中 undefined reference

c++ - 如何打印 map 对象?

c++ - 全局拦截窗口移动

c - 为什么地址运算符 (&) 对于通过函数传递的数组很重要?

c - 为什么下面的程序输出是 5,而不是 4?谁能解释一下?

c++ - 包含可变参数模板的元组

c++ - C++11 中带有可变参数模板的 bindParameter 函数