大概不是.这是我的用例:
我有两个班A和B.
class A
{
B *b_;
};
class B
{
public:
B(): b_string_("") {};
private:
std::string b_string_;
};
Run Code Online (Sandbox Code Playgroud)
我希望b_始终指向B对象.我希望b_指向一个"空"B对象而不是nullptr,这样我总是可以以定义的方式取消引用*b_来获得一个空的b _-> b_string.所以我想我会创建一个全局的"null B对象":const B null_b.但我不能(自然地)使用这个A ctor:
A(): b_(&null_b) {};
Run Code Online (Sandbox Code Playgroud)
因为b_不能指向const变量.如果不是"空B对象",则b_需要指向可变B对象.
使全局非const解决问题,但我想保护const,所以我可以保证"null对象"永远不会改变.
FWIW,这涉及一个大型项目,其中b_指向另一个类中B对象的向量.我可以在那个向量中添加一个空的B对象,但这让我觉得很糟糕.
是否有方法或模式来解决我的问题?
不使用指向B对象的指针,而是使用虚方法创建基类并存储指向它的指针.从中派生您的B类和Null_B类,但不要让方法Null_B进行修改.现在,即使你的Null_B对象不存在const,也不再重要了.
作为额外的保护层,您可以尝试修改null_b对象抛出异常,以便您可以检测并找到逻辑错误.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |