嗨,我想问一个让我困惑的问题。
我有这样的课:
class A {
private:
std::vector<Object*>* my_array_;
...
public
std::vector<Object*>& my_array(); // getter
void my_array(const std::vector<Object*>& other_array); // setter
};
根据您的经验,我想问您,以(可能)安全的方式实现 setter 和 getter 的正确方法是什么。
我想到的第一个解决方案如下。
首先,当我实现 setter 时,我应该: A)检查输入不是对我已经持有的数据结构的引用;B) 释放 my_array_ 指向的所有对象的内存 C) 复制 other_array 指向的每个对象并将其副本添加到 my_array_ D) 最后结束函数。
getter 可能会生成内部数组的副本,以防万一。
问题很多: - 这种策略是不是矫枉过正?- 真的能避免问题吗?- 有人真的使用它还是有更好的方法?
我试图寻找这个问题的答案,但没有发现什么特别关注这个问题。
使用智能指针是一个很好的答案,我感谢你们俩.. 看来我不能给多个“有用的答案”,所以我提前道歉。:-)
然而,从你的回答中提出了一个新的疑问。当我对对象使用包含 unique_ptr 的向量时,我将不得不定义一个深拷贝构造函数。鉴于现在我们正在使用智能指针,有没有比使用迭代器复制对象向量中的每个元素更好的方法?