为什么在通过引用传递对象时调用析构函数?

时间:2015-01-17 21:32:18

标签: c++

我使用方法insert()将Image对象传递给哈希表。

htImages.insert(WALL_UP_CLOSE, imgWalls[WALL_UP_CLOSE]);

如您所见,我通过引用将对象传递给Value。

void insert(const Key &key, const Value &value)
{
    Entry entry;
    int index;

    // Build up entry structure
    entry.m_key = key;
    entry.m_value = value;

    // Build the insertion index
    index = m_hash(key) % m_size;

    // Insert the value
    m_table[index].append(entry);

    m_count++;
}

但是,一旦此函数在最后一行结束,就会调用下面的析构函数。

Image::~Image()
{
    glDeleteTextures(1, &m_handle);
    refCount--;
}

我的偏好是没有调用析构函数。我通过引用传递它,那么为什么要调用析构函数呢?

1 个答案:

答案 0 :(得分:3)

你有一个Entry类型的局部变量,它会在函数末尾自动销毁。

当它被销毁时,析构函数会为每个子对象运行。

可能entry.m_value = value;正在复制某些东西,需要清理额外的副本。