在C ++中使用Vector进行重新分配

时间:2019-04-29 22:25:14

标签: c++

std::vector<char>*temp = new std:: vector<char>;
temp->push_back('a');

我是否需要使用Delete temp释放内存?还是通过向量来处理内存释放?

2 个答案:

答案 0 :(得分:2)

vector<>的要点是它在内部为您分配内存,并使您无需担心内存管理的所有需求。您只需像这样使用

std::vector<char> temp;
temp.push_back('a');

然后,当temp超出范围时,将自动删除temp内部存储的所有内存。

答案 1 :(得分:0)

std::vector包含一个内部数组。向量破坏后,该数组会自动删除。

但是,如果您将指针分配给向量,则需要显式删除它。一般来说,只使用向量本身,而不是指向它的指针。

如果我们编写自己的类,我们可以看到此行为。此类包含一些数据,当该数据被销毁时,它将打印一条消息。

class MyClass {
    int* data;
   public:
    MyClass() : data(nullptr) {}
    MyClass(int size) : data = new int[size]() {}
    ~MyClass() {
        std::cout << "Deleting data\n"; 
        delete[] data;
    }
};

让我们看一下两个功能。其中一个只是直接创建MyClass,而另一个则创建指针。

void withoutPointer() {
    MyClass c(10);
    std::cout << "Created MyClass\n"; 
}

带指针:

void withPointer() {
    MyClass* ptr  = new MyClass(10); 
    std::cout << "Create MyClass*\n"
    std::cout u<< "Exiting function\n"; 
}

如果运行withoutPointer(),它将打印:

Creating MyClass
Deleting data

这是因为调用了析构函数,因此删除了数据。另一方面,如果使用指针运行该指针,它将显示:

Create MyClass*
Exiting function

指针从未被删除,因此数据从未被破坏。