我正在学习 C++,我只是有一个小问题。我有一个包含vector<int>
. 从外部这vector<int>
应该是可访问的,因此应该可以添加/删除/获取它的元素。
应该不可能用新实例覆盖对象。这是这样一个示例类(已最小化):
class MyClass
{
public:
vector<int>& vec() { return _vec; }
private:
vector<int> _vec;
};
例如,以下代码有效:
MyClass x;
x.vec().push_back(0);
x.vec().push_back(7);
x.vec().push_back(9);
cout << c.vec().size() << endl;
但不幸的是,以下代码也有效:
MyClass x;
x.vec() = vector<int>();
我喜欢禁止这样做,但我确实只找到了返回类型指针的解决方案vector<int> *
。但我了解到指针是“邪恶的”,我不应该直接使用它们,我必须使用智能指针。我认为对于这个问题,智能指针是无用的,所以我不知道如何解决这个简单的问题:-/
或者只是一个简单的指针是最干净的解决方案?
此致
凯文
-编辑-
一般来说,我喜欢做一些可以使用的东西,比如下面的 C# 类:
public class MyClass
{
public List<int> List { get; private set; }
public MyClass()
{
List = new List<int>();
}
}
这只是一个例子,我只是想如何用 C++ 做这个。vector<int>
也许在某些情况下,我的类比/List<int>
要包含到其他类中要复杂得多。
但也许只能通过为内部对象定义自己的方法(=接口)来做到这一点。