我正在尋找一種乾淨的方式來管理數組使用C++ 11中引入的新指針模板的範圍,這裏的典型場景是當調用win32 API函數。什麼是簡單的範圍管理在C + +中的數組的簡潔範圍11
我在這裏發帖,因爲雖然有很多關於更復雜的事情的討論,但這個相對簡單的方案似乎沒有討論過,我想知道是否有比我現在開始做的更好的選擇。
#include <memory>
void Win32ApiFunction(void* arr, int*size)
{
if(arr==NULL)
*size = 10;
else
{
memset(arr,'x',10);
((char*)arr)[9]='\0';
}
}
void main(void)
{
// common to old and new
int size;
Win32ApiFunction(NULL,&size);
// old style - till now I have done this for scope reasons
if(char* data = new char[size])
{
Win32ApiFunction(data,&size);
// other processing
delete [] data;
}
// new style - note additional braces to approximate
// the previous scope - is there a better equivalent to the above?
{
std::unique_ptr<char[]> data1(new char[size]);
if(data1)
{
Win32ApiFunction(data1.get(),&size);
// other processing
}
}
}
無論哪種情況,new都會在分配失敗時拋出異常,而不會返回0. – karunski 2012-02-23 12:14:39
對於大多數真正的Win32 API函數,您需要在第一次調用之前將「size」初始化爲0。 – user9876 2012-02-23 12:24:05
如果您需要在第二次調用之前將數組初始化爲零,那麼'std :: vector'是優越的(因爲它會自動且快速地進行)。如果你不需要對數組進行歸零,你所擁有的優於'std :: vector ',因爲它不會花費循環進行不必要的零初始化。如果你不處於要求最高性能的環境中,那麼使用哪個並不重要。 –
2012-02-23 13:35:38