私人构造函数

Max*_*rai 1 c++ constructor private

我有一个类的对象,它有私有构造函数:

class CL_GUIComponent
{
    // ...
    private:
    CL_SharedPtr<CL_GUIComponent_Impl> impl;
    CL_GUIComponent(CL_GUIComponent &other);
    CL_GUIComponent &operator =(const CL_GUIComponent &other);
    CL_GraphicContext dummy_gc;
};
Run Code Online (Sandbox Code Playgroud)

我有一个类,它有一个指向我之前描述的类型的对象的指针.

class Some
{
   private:
       CL_GUIComponent *obj;
   public:
       CL_GUIComponent getComp() { return *obj; }
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码调用了错误:

In member function ‘CL_GUIComponent Some::getComp()’:
error: ‘CL_GUIComponent::CL_GUIComponent(CL_GUIComponent&)’ is private
error: within this context
Run Code Online (Sandbox Code Playgroud)

我如何存储和获取该对象?

Pet*_*der 5

返回引用:

CL_GUIComponent& getComp() { return *obj; } 
Run Code Online (Sandbox Code Playgroud)

和/或

const CL_GUIComponent& getComp() const { return *obj; } 
Run Code Online (Sandbox Code Playgroud)

你有他们的代码试图返回一个副本,但复制构造函数是私有的,所以它无法访问它(因此错误).在任何情况下,对于非平凡的对象,返回一个const&(通常,并非总是)几乎总是更好.