C++11,内存泄漏

C++11 , leaking memory

我有一个案例 Xcode 的仪器检测到

std::vector<UserID_t> functions::getUserIds() const {
    static_assert(sizeof(int64) == sizeof(uint64_t), "size is not matched");
    auto object = AAAAA::BBBB::ValueObject<int64 *>(_hash->getValue((nByte)Key::USER_IDS));
    auto size = object.getSizes();
    std::vector<UserID_t> ret(*size);
    auto pVal = object.getDataCopy();
    for (int index = 0; index < *size; index++) {
        ret[index] = *pVal;
        ++pVal;
    }
    return ret;
}

该工具显示 "ret" 中的元素在 return 之后未被释放。 但我认为 int64 是一个标量变量,我不需要释放它们。 是吗?

我用的是Xcode6.3.2

auto 与指针一起使用(假设它们是指针,而不是某些 class 带有重载的 * 运算符)会使事情变得混乱。我认为错误可能是因为您在 object.getDataCopy() 中创建了 "copy",return 指向它并且没有在 return 之前删除它 functions::getUserIds()

函数名.getSizes();暗示它 returns 一个大小数组?

或者这只是一个糟糕的 API 名称。

size 的实际类型是什么?

更新:在评论中发现罪魁祸首是 getDataCopy(),它制作了一个深层副本,然后永远不会被释放。