C++ Return 对非复制对象向量的引用
C++ Return reference to vector of non-copy objects
我有 class A
禁用了复制语义,class B
包含 A
的向量。如何编写 B 的成员函数 returns 引用 A
的向量?
对于那些了解 Rust 的人,这里是我正在尝试做的事情(用 Rust 语言表达):
struct A {/* ... */}
struct B {
data: Vec<A>,
}
impl B {
pub fn data(&self) -> &Vec<A> {
&self.data
}
}
正如@molbdnilo 所说,我的错误是我使用了 auto data = b.data();
而不是 auto& data = b.data();
。因此,以下示例正在运行,并展示了如何执行我所要求的操作:
#include<vector>
class A
{
public:
A(const A&) = delete;
A(A&&) = default;
A& operator=(const A&) = delete;
A& operator=(A&&) = default;
private:
/* some data */
};
class B
{
public:
B(): m_data {} {}
const std::vector<A>& data() const {
return this->m_data;
}
private:
std::vector<A> m_data;
};
int main()
{
auto b = B();
auto& data = b.data();
}
我有 class A
禁用了复制语义,class B
包含 A
的向量。如何编写 B 的成员函数 returns 引用 A
的向量?
对于那些了解 Rust 的人,这里是我正在尝试做的事情(用 Rust 语言表达):
struct A {/* ... */}
struct B {
data: Vec<A>,
}
impl B {
pub fn data(&self) -> &Vec<A> {
&self.data
}
}
正如@molbdnilo 所说,我的错误是我使用了 auto data = b.data();
而不是 auto& data = b.data();
。因此,以下示例正在运行,并展示了如何执行我所要求的操作:
#include<vector>
class A
{
public:
A(const A&) = delete;
A(A&&) = default;
A& operator=(const A&) = delete;
A& operator=(A&&) = default;
private:
/* some data */
};
class B
{
public:
B(): m_data {} {}
const std::vector<A>& data() const {
return this->m_data;
}
private:
std::vector<A> m_data;
};
int main()
{
auto b = B();
auto& data = b.data();
}