【发布时间】:2020-02-21 16:22:20
【问题描述】:
我想通过重载为我的类实现几个构造函数。据我了解,遵循 DRY 原则的惯用方式是使用一种称为委托构造函数的功能。我还看到了关于在任何地方使用引用参数并不惜一切代价避免使用指针的想法,因为引用是一种 c++ 方式等。
所以我认为这可以用指针来实现(可行):
class B {};
class C {};
class A {
public:
A();
A(const B* b);
A(const B* b, const C* c);
private:
const B* b_;
const C* c_;
};
// These ctors short and concise, delegating work to last ctor
A::A() : A(nullptr, nullptr) {}
A::A(const B* b) : A(b, nullptr) {}
// This ctor contains code that deals with b or c being nullptr
// Ideally I only modify code in this ctor (DRY)
A::A(const B* b, const C* c) : b_(b), c_(c) {
//code
}
以下,显然不起作用:
class B {};
class C {};
class A {
public:
A();
A(const B& b);
A(const B& b, const C& c);
private:
const B& b_;
const C& c_;
};
A::A() : A(nullptr, nullptr) {}
A::A(const B& b) : A(b, nullptr) {}
A::A(const B& b, const C& c) : b_(b), c_(c) {
//code
}
所以问题是如何按照指针示例中的语义实现委托构造函数,但将引用作为构造函数的参数。
(我是否完全错过了这里的某个地方?甚至可能只是盯着整体思路?)
【问题讨论】:
-
我假设
b_和c_是引用?请提供minimal reproducible example。您不能将nullptr分配给引用,如果您的值可以为 null,则需要使用指针 -
谢谢@AlanBirtles。我在示例中添加了一些代码。希望这进一步澄清了这个问题。
标签: c++ pointers constructor pass-by-reference