指针是否可以指向const空类或非const类?

Mac*_*gma 6 c++ pointers

大概不是.这是我的用例:

我有两个班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对象,但这让我觉得很糟糕.

是否有方法或模式来解决我的问题?

Mar*_*som 5

不使用指向B对象的指针,而是使用虚方法创建基类并存储指向它的指针.从中派生您的B类和Null_B类,但不要让方法Null_B进行修改.现在,即使你的Null_B对象不存在const,也不再重要了.

作为额外的保护层,您可以尝试修改null_b对象抛出异常,以便您可以检测并找到逻辑错误.