C++ 这段代码内存泄漏?

C++ 这段代码内存泄漏?,c++,C++,此处示例: class A { private: int buff[1000]; public: A(int n) { buff = new int[n]; } }; int main() { for (int i = 10; i < 1000; i++) { A a(i); } return 0; } 有人能帮我吗?这个代码怎么了?内存泄漏?或任何其他错误?除了注释中指出的

此处示例:

class A
{
private:
    int buff[1000];
public:
    A(int n)
    {
        buff = new int[n];
    }
};

 int main()
 {
     for (int i = 10; i < 1000; i++)
     {
         A a(i);
     }
     return 0;
 }

有人能帮我吗?这个代码怎么了?内存泄漏?或任何其他错误?

除了注释中指出的问题外,您应该创建一个析构函数,使用new关键字调用您在堆上分配的项:


不要忘记删除后的[],因为它是数组。

现代C++表示,你应该在代码中使用新的或删除,而应该是为你的内存管理的STD::UnQuyJ-PTR。< /P> 因此,通过以下方式,您的课程将更适合现代习语:

#include <memory>

class A
{
private:
    std::unique_ptr<int[]> buff;
public:
    A(int n)
        : buff(std::make_unique(int[n])) // buff(new int[n]) if using C++11
    { }
};

int main()
{
    A a(5);
    return 0;
}

不幸的是,std::make_unique在C++11中不可用,因此在此之前必须使用new。但是,您仍然可以使用std::unique\u ptr,这将解决内存泄漏问题。

显然是的。你有一个没有匹配删除的新文件。内存泄漏应该是你最不担心的。这段代码甚至不编译。如果它不编译,它就不会泄漏,是吗?它仍然不会编译。数组是不可分配的。@0x499602D2,好吧,tigerrussell说,从评论中指出的问题来看…@Kay评论中没有指出其他具体问题。OP不知道数组是不可分配的。更改int buff[1000];到int*buff;那就好了。不太好,但至少是有效的。嗯,我的意思是,除了它不会编译之外。我唯一关心的是演示析构函数和delete[]的使用。OP可以搞清剩下的事情-他/她是成年人。。大概
#include <memory>

class A
{
private:
    std::unique_ptr<int[]> buff;
public:
    A(int n)
        : buff(std::make_unique(int[n])) // buff(new int[n]) if using C++11
    { }
};

int main()
{
    A a(5);
    return 0;
}