使用参数化构造函数C ++动态分配对象数组

时间:2018-09-22 14:25:13

标签: c++

动态分配对象数组时遇到问题。 我创建了一个简单的名为Rectangle的类

#include <iostream>
class Rectangle
{
public:
    // parameterized constructor, providing the height and width of a rectangle
    Rectangle(int height, int width) : m_height(height), m_width(width)
    {
        std::cout << "Create a new rectangle with parameter constructor \n";
    }
    ~Rectangle()
    {
        std::cout << "delete object \n";
    }
    // calculate the area of the rectangle
    double area() const
    {
        return m_height*m_width;
    }
    // print the information of the rectangle
    friend std::ostream& operator<<(std::ostream &out, const Rectangle &rec)
    {
        out << "Rectangle " << rec.m_height << " x " << rec.m_width << " has area " << rec.area();
        return out;
    }

private:
    double m_height;
    double m_width;
};

然后在主函数中,我定义了一个由Rectangle类的3个对象组成的数组,并为每个对象指定了高度和宽度。

int main()
{
    Rectangle * rec1 = new Rectangle[3]{{ 10, 20 }, { 20, 30 }, { 40, 50 }};
    for (int i = 0; i < 3; ++i)
        std::cout << rec1[i] << '\n';

    return 0;
}

但是,我收到了一个错误(来自VS2013) 错误1错误C1001:编译器中发生内部错误。

但是如果我在类的定义中注释析构函数

/*~Rectangle()
{
    std::cout << "delete object \n";
}*/

程序可以运行,结果如下。

Create a new rectangle with parameter constructor
Create a new rectangle with parameter constructor
Create a new rectangle with parameter constructor
Rectangle 10 x 20 has area 200
Rectangle 20 x 30 has area 600
Rectangle 40 x 50 has area 2000
Press any key to continue . . .

我不知道这是什么问题。通常,出于某些目的,我们应该在类中声明一个析构函数。但是在这种情况下,它会产生错误。我尝试在互联网上搜索问题,但找不到答案。

1 个答案:

答案 0 :(得分:5)

如果收到内部编译器错误,则表明您的编译器已损坏。升级或使用其他编译器。细微的代码更改可以消除错误,但这不是您的代码。