#include <iostream>
#include <string>
struct A {
A(std::string s) { name = s; }
std::string name;
};
struct B {
B(std::string s) : a(A(s)) {}
A& a;
};
int main() {
B b("tom");
std::cout << b.a.name << std::endl;
}
我正在尝试分配class B
的A&amp; a与A's object
。我可以做的几种方式。
1)制作A&amp; a到A * a并在B的构造函数中执行a = new A(s)。这有效,但我试图避免这种情况,因为我必须做新的删除。
2)上面我有class B
,它接受字符串并创建一个右值对象来初始化左值引用。这将导致编译错误。
3)我可以A& a
到A&& a
,但不确定这是否合适。因为它编译但cout给垃圾。
4)在main中创建A的实例并将其传递给B的构造函数。但我现在试图避免这种情况。
答案 0 :(得分:4)
您不需要引用,指针或类似内容。
你只需要一个A
类型的对象,就像那样简单。
另外,您可以使用移动语义来避免所有副本:
#include <iostream>
#include <string>
#include <utility>
struct A
{
A(std::string s) : name(std::move(s)) {}
std::string name;
};
struct B
{
B(std::string s) : a(std::move(s)) {}
A a;
};
int main()
{
B b("tom");
std::cout << b.a.name << std::endl;
}
答案 1 :(得分:2)
正确和好的代码看起来像这样:
struct A
{
A(std::string name) : name_(std::move(name)) {}
std::string name_;
};
struct B
{
B(std::string name) : a_(std::move(name)) {}
A a_;
};