我有一个类CContainer
,它有一些成员CMemberX
,CMemberY
它们彼此独立,并且其他CClientA
类CClientB
使用CContainer
.
#include "MemberX.h"
#include "MemberY.h"
class CContainer
{
public:
CMemberX & GetX() const { return m_x; }
CMemberY & GetY() const { return m_y; }
private:
CMemberX m_x;
CMemberY m_y;
};
我想避免在使用前向声明和动态分配和CClient
修改其中一个类时重新编译所有类。CMember
m_x
m_y
最初,我制作了成员指针:
// Container.h
class CMemberX;
class CMemberY;
class CContainer
{
public:
CContainer();
~CContainer();
CMemberX & GetX() const { ASSERT(m_pX != NULL); return *m_pX; }
CMemberY & GetY() const { ASSERT(m_pY != NULL); return *m_pY; }
private:
CMemberX* m_pX;
CMemberY* m_pY;
};
// Container.cpp
#include "Container.h"
#include "MemberX.h"
#include "MemberY.h"
// Allocate members on heap
CContainer::CContainer() : m_pX(new CMemberX()), m_pY(new CMemberY()) {}
CContainer::~CContainer() { delete m_pX; delete m_pY; }
然后我想,我也可以使用引用而不是指针,所以它看起来更像原始代码:
// Container.h
class CMemberX;
class CMemberY;
class CContainer
{
public:
CContainer();
~CContainer();
CMemberX & GetX() const { return m_x; }
CMemberY & GetY() const { return m_y; }
private:
CMemberX & m_x;
CMemberY & m_y;
};
// Container.cpp
#include "Container.h"
#include "MemberX.h"
#include "MemberY.h"
// Allocate members on heap
CContainer::CContainer() : m_x(*new CMemberX()), m_y(*new CMemberY()) {}
CContainer::~CContainer() { delete &m_x; delete &m_y; }
我不喜欢指针成员的地方在于,看起来指针可能会NULL
在运行时被替换,或者对象可能会在运行时被替换,但事实并非如此。
我不喜欢这些参考资料的是 CTor 和 DTor 中的代码看起来有点老套。
哪种方法更可取?有更好的解决方案吗?
关于复制/分配的注意事项:类的实例CContainer
在任何情况下都不会被复制或分配给彼此。