C++ vector 内存管理需要注意的地方


vector g_vec;
void release()
{
    // 程序员自己管理 自己动态分配的内存
    for_each(g_vec.begin(), g_vec.end(), [](Student*& iter) {delete iter; iter = nullptr; });
}

struct Student
{
    explicit Student(const int val) noexcept :m_var(val)
    {
        cout<<"构造函数:"<m_var<     }
    
    Student(const Student& other) noexcept
    {
        cout<<"copy构造函数:"<         this->m_var = other.m_var;
    }
    
    Student(Student&& other) noexcept
    {
        cout<<"move构造函数:"<         this->m_var = other.m_var;
        other.m_var = 0;
    }
    
    Student& operator=(const Student& other) noexcept
    {
        if(this == &other)
        {
            return *this;
        }
        cout<<"赋值运算符函数:"<         this->m_var = other.m_var
        return *this;
    }
    
    Student& operator=(Student&& other) noexcept
    {
        if (this == &other)
        {
            return *this;
        }
        cout<<"move赋值运算符函数:"<         this->m_var = other.m_var;
        other.m_var = 0;
        return *this;
    }
    
    ~Student()
    {
        cout<<"析构函数:"<m_var<     }
    
private:
    int m_age;
};

vector.capacity()返回vector当前分配的内存总量。
vector.size()返回vector当前有多少元素
 

修改capacity的三种方法:
vector.reserve(size_type new_len) 如果new_len<=capacity()什么都不做;如果new_len>capacity(),重新分配内存,最后的capacity()可能>=new_len
vector.shrink_to_fit() 重新分配内存使capacity()==size(),意思就是把原来没有用到的内存释放掉。
vector.swap或者std::swap,交换的过程中包含capacity的改变。
capacity误区:
operator=, vector.assign, vector.erase, vector.clear不会修改capacity
内存释放误区:
vector.clear, vector.earse不会释放程序员自己动态分配的内存
只是清除了容器,size为0,不代表capacity为0,前者为元素的个数,后者为内存大小。

你可能感兴趣的:(C++,c++)