我必须编写一个类似C++向量的通用数据结构作为分配的一部分。如何将数据传递给模板集合
这是我的想法矢量:
template<typename T>
class MyVector {
private:
T* data_;
size_t size_;
public:
MyVector();
MyVector(const MyVector &otherVector);
// which one should I use?
add(const T& value);
add(T value);
~MyVector();
};
现在我不知道如何将值传递给方法。来自Java我有点不知所措。在Java中,您将毫不犹豫地通过引用传递值,如果GC仍然被引用,则GC永远不会删除该对象。
在C++中,您将创建一个烂摊子,如果你会通过参考考虑代码通过这样的:
void myFunction(MyVector &myVector) {
int a = 5;
myVector.add(a);
}
int main() {
auto vector = MyVector<int>();
myFunction(vector);
// now the vector contains a reference to
// something that doesn't exist anymore.
}
你怎么解决这个问题呢?你会通过引用并创建一个副本或通过值传递(它为您创建一个副本)
看看C++ std :: vector接口我看到他们使用引用。
如果您必须创建自己的副本,我只是看不到通过引用传递的值。
如果向下投票这个问题,你可以请写明理由吗? – TimKaechele
我怀疑你对C++中“通过引用传递对象”的含义没有一个确切的概念。 “通过引用并创建副本”是错误的;通过引用传递它是避免创建副本的C++方式。我建议你仔细阅读这个答案:http://stackoverflow.com/a/5922217/6022656 – max66