c++ - 复制构造函数调用无限循环

标签 c++ infinite-loop copy-constructor

我将一个值作为引用传递给复制构造函数,但正在调用一个无限循环。

这是我的类(class):

class Vector2f{
private:
    GLfloat x;
    GLfloat y;

public:
    Vector2f();
    Vector2f(const GLfloat _x, const GLfloat _y);
    Vector2f(const Vector2f &_vector);

    ~Vector2f();
};

下面是方法的实现:

Vector2f::Vector2f():
        x( 0.0f ),
        y( 0.0f )
{
    DebugLog("Vector2f constructor");
}

Vector2f::Vector2f(const GLfloat _x, const GLfloat _y):
        x( _x ),
        y( _y )
{
    DebugLog("Vector2f constructor(%f, %f)", _x, _y);
}


Vector2f::Vector2f(const Vector2f &_vector):
        x( _vector.getX() ),
        y( _vector.getY() )
{
    DebugLog("Vector2f copy constructor");
}

Vector2f::~Vector2f()
{

}

这是我访问类的方式:

Vector2f tempVector1 = Vector2f(0.0f, 0.0f);
DebugLog("tempVector1 initialized");

Vector2f tempVector2;
tempVector2 = Vector2f(0.0f, 0.0f);
DebugLog("tempVector2 initialized");

我得到的结果是:

Vector2f constructor(0.000000, 0.000000)
tempVector1 initialized
Vector2f constructor
Vector2f constructor(0.000000, 0.000000)
Vector2f copy constructor
Vector2f copy constructor
Vector2f copy constructor
...

尝试初始化先前创建的对象时发生无限循环。 如果我尝试将 tempVector1 复制到 tempVector 2,也会发生无限循环:

Vector2f tempVector2;
tempVector2 = Vector2f(tempVector1);

为什么会发生,如何防止它进入无限循环?

提前谢谢你。

最佳答案

这一行:

tempVector2 = Vector2f(tempVector1);

会调用 operator=,而不是复制构造函数。您是否正在定义一个 operator= 来做一些古怪的事情?

此外,您的代码在 Linux 上的 g++ 4.3.2 和 Mac 上的 g++ 4.2.1 上运行良好(在我定义 getX、getY、将 DebugLog 转换为 printf 并使用 float 而不是 GLfloat 之后)。

关于c++ - 复制构造函数调用无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153184/

相关文章:

c++ - 有关运动的信息。 QT C++

c# - 如何处理 "infinite"IEnumerable?

Java尝试用唯一的数字填充int数组

c++ - 构造函数中的额外析构函数、复制构造函数、C++ 中的析构函数序列

c++ - CUDA 和复制构造函数

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

c++ - C++ 中的单例类

c++ - 避免在用户定义的模板特化中重复

C++如何检查字母是否是alpha(不是拉丁字母)

ruby - 创建一个无限循环