gpt4 book ai didi

c++ - 为什么不调用复制构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:12 26 4
gpt4 key购买 nike

我有这段用于复制多边形类的代码。我遇到的问题是,最终顶点指向原始多边形类位置。由于复制构造函数似乎没有被调用。这是为什么?

Polygon::Polygon(const Polygon &aPolyToCopy)
{
int i;
vertices = new Vertex[aPolyToCopy.count];

for (i=0;i<aPolyToCopy.count;i++)
{
vertices[i].x = aPolyToCopy.vertices[i].x;
vertices[i].y = aPolyToCopy.vertices[i].y;
}

count = aPolyToCopy.count;
}

在列表模板中我这样做

template <class T, int i>
bool SortedVector<T, i>::add ( const T& v )
{
myClass[myCurrent] = v; //Copy constructor not called ?
myCurrent++;

return true;
}

模板是

 template <class T, int i>
class SortedVector
{
public:
int maxSize;
T myClass[i];
int myCurrent;

SortedVector();
~SortedVector();
bool add ( const T& v );
};

最佳答案

你正在做一个赋值,你在这里不构造一个新对象。如果定义自定义复制构造函数,还需要重载 operator=

参见 http://www.learncpp.com/cpp-tutorial/911-the-copy-constructor-and-overloading-the-assignment-operator/例如。

如果您要执行类似x = Polygon(y) 的操作,那么您的复制构造函数将被调用(后跟默认的operator=)。但不要使用此解决方法,只需提供您的 operator=

关于c++ - 为什么不调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com