我对C++还比较新,正在尝试理解构建类的良好实践。
假设我有一个名为Foo的类:
我想创建一个类
"目前这样是不行的,因为我没有为“Foo”定义默认构造函数。"
"第二种选择:使用指针作为类成员。"
注意:我必须将构造函数中的
哪个选项更自然(如何修复错误)?我觉得第一种选项可能更好,但是我的
感谢任何帮助。
假设我有一个名为Foo的类:
class Foo {
public:
double foo;
Foo(double foo);
Foo add(Foo f);
}
我想创建一个类
Bar
,它由两个 Foo
对象组成,并在构造时创建第三个对象。
第一种选择: 对象作为类成员
class Bar {
public:
Foo foo1;
Foo foo2;
Foo foo3;
Bar(const Foo &f1, const Foo &f2);
}
Bar::Bar(const Foo &f1, const Foo &f2):
{
foo1 = f1;
foo2 = f2;
foo3 = f1.add(f2);
}
"目前这样是不行的,因为我没有为“Foo”定义默认构造函数。"
"第二种选择:使用指针作为类成员。"
class Bar {
public:
const Foo* foo1;
const Foo* foo2;
const Foo* foo3;
Bar(const Foo &f1, const Foo &f2);
}
Bar::Bar(const Foo &f1, const Foo &f2):
{
foo1 = &f1;
foo2 = &f2;
foo3 = &(f1.add(f2));
}
注意:我必须将构造函数中的
foo1
和 foo2
声明为 const
。然而,它仍然失败了,因为对于 foo3
,我正在获取一个临时结果的地址,这是不合法的。哪个选项更自然(如何修复错误)?我觉得第一种选项可能更好,但是我的
Foo
对象不是需要在内存中创建两次吗?(一次调用构造函数,一次由构造函数本身)感谢任何帮助。
Foo
定义默认构造函数,您仍然可以使用成员初始化列表正确地初始化它。 - πάντα ῥεῖstd::unique_ptr
的回答都是错误的。不确定在这种情况下正确的SO协议是什么。 - Nemo