如何使用 "Get" 函数分配成员值?
How can I alloc member value with "Get" function?
这是一个简单的代码。
class Sub
{
...
public:
Sub()
{
...
}
}
class Main
{
private:
Sub* m_pSub
public:
Main()
{
// I don't want construct "Sub" here
m_pSub = nullptr;
}
Sub* GetSub()
{
return m_pSub;
}
}
/////////////////////
// in source
Main* pMain;
pMain->GetSub() = new Sub()
当然,pMain->GetSub() = new Sub()是不行的,因为上面代码中'='的左值必须是可修正的值。
因此,请教我各种类似的实现方式
(可以用的越短越好)
谢谢!
使代码正常工作的最简单方法是 GetSub()
return 引用,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub*& GetSub()
{
return m_pSub;
}
};
但是,这不是很好的class设计。
另一种选择是让 GetSub()
在第一次调用时创建对象,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub* GetSub()
{
if (!m_pSub) m_pSub = new Sub;
return m_pSub;
}
};
否则,使用显式setter方法,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub* GetSub()
{
return m_pSub;
}
void SetSub(Sub* newSub)
{
m_pSub = new Sub;
}
};
...
pMain->SetSub(new Sub);
无论哪种方式,您确实应该使用智能指针,std::unique_ptr
或 std::shared_ptr
,以明确谁拥有 Sub
对象并负责销毁它。原始指针不传达该信息。
这是一个简单的代码。
class Sub
{
...
public:
Sub()
{
...
}
}
class Main
{
private:
Sub* m_pSub
public:
Main()
{
// I don't want construct "Sub" here
m_pSub = nullptr;
}
Sub* GetSub()
{
return m_pSub;
}
}
/////////////////////
// in source
Main* pMain;
pMain->GetSub() = new Sub()
当然,pMain->GetSub() = new Sub()是不行的,因为上面代码中'='的左值必须是可修正的值。
因此,请教我各种类似的实现方式 (可以用的越短越好)
谢谢!
使代码正常工作的最简单方法是 GetSub()
return 引用,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub*& GetSub()
{
return m_pSub;
}
};
但是,这不是很好的class设计。
另一种选择是让 GetSub()
在第一次调用时创建对象,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub* GetSub()
{
if (!m_pSub) m_pSub = new Sub;
return m_pSub;
}
};
否则,使用显式setter方法,例如:
class Main
{
private:
Sub* m_pSub = nullptr;
public:
Main() = default;
Sub* GetSub()
{
return m_pSub;
}
void SetSub(Sub* newSub)
{
m_pSub = new Sub;
}
};
...
pMain->SetSub(new Sub);
无论哪种方式,您确实应该使用智能指针,std::unique_ptr
或 std::shared_ptr
,以明确谁拥有 Sub
对象并负责销毁它。原始指针不传达该信息。