<分区>
暗示有一个由分配在堆中的对象组成的类。
class A
{
public:
A() { m_b = new B; m_c = new C; }
virtual ~A() { delete m_b; delete m_c; }
inline B* b() const { return m_b; }
inline C* c() const { return m_c; }
private:
B* m_b;
C* m_c;
}
哪种 setter 最适合此类代码?
我想出了这个,
inline void setB(B* b) const { delete m_b; m_b = b; }
inline void setC(C* c) const { delete m_c; m_c = c; }
但是有一个问题。如果我们添加了一个非堆变量或只是一个我们不必使用此 setter 删除的变量,它将在下一次调用 setter 后被删除,这种情况会导致错误或意外行为。
我们也不能直接删除对象,因为 getter 有 const
修饰符。此外,它也不安全,因为类的用户可能不知道内部对象是否分配在堆中。
你能解释一下如何对堆分配的对象使用 setter 吗?