【发布时间】:2009-08-27 07:45:19
【问题描述】:
我想使用 std::vector 动态分配内存。场景是:
int neededLength = computeLength(); // some logic here
// this will allocate the buffer
std::vector<TCHAR> buffer( neededLength );
// call a function that accepts TCHAR* and the number of elements
callFunction( &(buffer[0]), buffer.size() );
上面的代码有效,但是这个&(buffer[0]) 看起来很难看。有没有更优雅的方法来达到同样的效果?
【问题讨论】:
-
你应该将缓冲区重命名为优雅缓冲区... :)
-
你不能让 callFunction 接受向量吗?在我看来,这似乎是真正优雅的方式。否则你会被困在 C 和 C++ 之间不雅的无人区。
-
@bismuth:我知道将消费者函数更改为接受向量是一个不错的解决方案,但这不是一个选项。事实上,我只将向量用作预先分配大小未知的数组。
-
如果您使用它的目的只是分配一次,您可能会牺牲范围自动删除的便利性并使用 TCHAR* buffer = new TCHAR[neededLength];只要记住在完成后删除 [] 缓冲区即可。
-
@cheshirekow:记住是这里的关键问题。如果抛出异常
delete[]将不会运行,所以我必须使用单独的try-catch 来处理delete缓冲区。这就是为什么vector或类似的东西更可取的原因。