删除指针向量中指针指向的对象

时间:2016-05-02 01:45:38

标签: c++ pointers object vector

我有一个指针向量,指向动态分配的火星结构。我的添加功能似乎工作正常,但我害怕我的删除功能没有正确删除对象和指针。你们可以查看删除功能并告诉我将在哪里解决问题吗?

$(".List-A").on("click", ".orderIt", function() {               
    $(this).parent().prepend($(this));
    $('.' + this.id).parent().prepend($('.' + this.id));
});

2 个答案:

答案 0 :(得分:0)

通过在指针上调用delete,您将释放指向对象使用的内存空间(实际上内存不会被释放,但是假设它可以重用)。

你的程序会遇到的问题是你删除了你的条目,然后减少了向量的大小,但指针没有删除而没有设置为nullptr,这意味着你在尝试取消引用它时会遇到问题(你的代码仅在删除最后一个元素时才有效。

另外,您可以(应该?)使用c ++ 11引入的新智能指针,在您的情况下,您可以用std :: shared_ptr替换原始指针。

了解更多信息: http://en.cppreference.com/w/cpp/memory/shared_ptr

答案 1 :(得分:0)

这会删除所有匹配Martian值的ssid个对象。

void martianDatabase::deleteMartian( string deleteID )
{
    auto martianIterator = database.begin();

    while( martianIterator != database.end() )
    {
        if( (*martianIterator)->ssid == deleteID )
        {
            delete *martianIterator;
            martianIterator = database.erase( martianIterator );
        }
        else
        {
            ++martianIterator;
        }
    }
}