【发布时间】:2015-11-19 23:40:07
【问题描述】:
我有一个案例,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”中的元素在返回后没有释放。 但我认为 int64 是一个标量变量,我不需要释放它们。 对吗?
我使用 Xcode 6.3.2
【问题讨论】:
-
object.getSizes()返回指针的事实是可疑的。这个指针指向什么?指针的寿命是多少?与object.getDataCopy()类似的问题 -
是的,
object.getSizes()返回一个指针。指针的时间线仅在此函数中。我找不到Similar questions with object.getDataCopy(),你能把它链接到主题吗,非常感谢 -
@KenjyNeo:你误解了关于
getDataCopy的评论,Igor 只是想说他对getDataCopy有类似的问题,他问过getSizes。我建议您将您的帖子编辑为:删除auto并放置真实类型或显示所有typedef的声明和涉及的函数,即:什么是UserID_t、Key::USER_IDS、getValue、@987654334 @、getSizes、getDataCopy?如果没有这些元素,回答者只能猜测您的问题。 -
指针的生命周期是什么一目了然。问题是,pointee 的生命周期是多少?
getSizes()和getDataCopy()是如何实现的?他们是否在堆上分配内存,并期望调用者释放它(注意你没有)?如果不是,那么谁分配内存,谁负责释放它? -
@MatthieuM, @Igor Tandetnik:
UserID_t的类型是uint64_t,'getSizes' 是const short *,`getDataCopy` 是模板值对象的深度复制函数。问题是 getDataCopy() 。我还没有通过 DEALLOCATE_ARRAY 发布数据副本。所以我找到了另一种解决方案,在这种情况下用 getDataAddress 替换 getDataCopy() 函数。非常感谢
标签: c++ xcode c++11 memory instruments