c++ - 禁止用户创建对象但允许某些类

标签 c++ class inheritance

我有以下两个类。

Class A
{
   proctected:
      A(){}
};

Class B
{
    push_new_A_into_v();
    vector<A> v;    
};

函数

push_new_A_into_v();

不会编译,因为 A 的构造函数是 protected 。使 B 从 A 继承无济于事,因为该方法创建了一个全新的 A(Why is protected constructor raising an error this this code?)。

A的构造函数被保护是为了让用户无法创建A类型的对象。

当用户仍然无法创建类型 A 的对象时,如何使该方法起作用?

最佳答案

除了user2913094's answer :

如果给予 B 完全友元只是为了允许构造似乎是 Not Acceptable ,你可以添加一个需要构造 token 的构造函数,它只能由 B 获得:

class A {
public:
    class ConstructionToken {
    private:
        ConstructionToken();
        friend class B;
    };

    A(ConstructionToken const&);
protected:
    A();
};

请注意, token 类是完全空的,但由于只有 B 可以访问其私有(private)构造函数,这实际上阻止了用户直接调用 A 的公共(public)构造函数。

这允许更细粒度的访问控制,但缺点是它需要在 A 上引入额外的构造函数重载。

关于c++ - 禁止用户创建对象但允许某些类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861588/

相关文章:

c++ - 安卓工作室 + NDK : C++ Editor does not work

javascript - 尝试从 tr 标签获取类名 - 'undefined'

Java 继承 - 找不到符号构造函数

c# - 消息传递场景中 .NET 类的 "Registration"顺序问题

java - 复杂继承/包组合中的包私有(private)成员可见性 - Qiuck 验证可见性的一般规则

java - 没有继承可以实现多态吗?

c++ - 类之间传递值

c++ - c++程序崩溃时会自动释放内存吗?

c++ - 在 xcode 10 上找不到 stdlibc++ header 错误

c++ - 模板问题 : No matching function for call