【发布时间】:2010-07-13 03:29:02
【问题描述】:
这有效吗?可接受的做法?
typedef vector<int> intArray;
intArray& createArray()
{
intArray *arr = new intArray(10000, 0);
return(*arr);
}
int main(int argc, char *argv[])
{
intArray& array = createArray();
//..........
delete &array;
return 0;
}
【问题讨论】:
-
有效吗?是的,可以接受吗?天哪,不!为什么?为什么会有人这样做?我需要知道!
-
@gnzlbg 大概是因为这“确保”了返回值不能是
null(尽管参见Billy ONeal关于异常安全的观点)。 -
如果向量必须在堆上:使用自动处理释放的智能指针。另请注意,返回值不能为 null,因为正在使用的 new 版本要么工作要么抛出。无论如何,这是非常糟糕的 API 设计,必须通过(非拥有)引用来释放内存并不是常见的做法。而且由于实际上空引用确实有效,您会相信编写此 API 的人不会返回空引用吗?我不会。
标签: c++