На днях меня уволили (по поводу stackoverflow!) За то, что я не использовал vector вместо динамически размещаемого массива wchar.
Так что я взглянул на использование этого метода манипуляции со строками, как кажетсякак хорошая идея для предотвращения возможных утечек памяти.
Я придумал, что если я не использую класс векторного шаблона неправильно, использование вектора гораздо менее гибко, чем использование массива, выделенного в куче, и старого доброгоmemcpy.
#include <shlobj.h>
HRESULT ModifyTheme()
{
using namespace std;
vector <WCHAR> sOutput;
vector <WCHAR> sPath;
vector <WCHAR> sThemesLocation;
vector <WCHAR> sThemeName;
const WCHAR sThemesPath [] = _T("\\Microsoft\\Windows\\Themes");
const WCHAR sFileName [] = _T("\\darkblue.theme");
sOutput.resize(MAX_PATH);
sPath.resize( MAX_PATH );
sThemesLocation.resize( MAX_PATH );
sThemeName.resize( MAX_PATH );
// Get appdata\local folder
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, &sPath[0] );
// copy consts to vectors
memcpy( &sThemesLocation[0], sThemesPath, sizeof(sThemesPath) );
memcpy( &sThemeName[0], sFileName, sizeof(sFileName) );
// append themes path & filename
sOutput.insert( sOutput.begin(), sPath.begin(), sPath.end() );
sOutput.insert( sOutput.end()-1, sThemesLocation.begin(), sThemesLocation.end() );
sOutput.insert( sOutput.end()-1, sThemeName.begin(), sThemeName.end() );
wcout << &sThemeName[0] << endl;
wcout << &sThemesLocation[0] << endl;
wcout << &sPath[0] << endl;
wcout << &sOutput[0] << endl;
return S_OK;
}
Я ожидаю, что вектор sOutput будет содержать конкатенацию всех строк.Вместо этого он содержит только первую вставленную строку.
Кроме того, я помню, что слышал, что, хотя невозможно присвоить значения вектора в списке инициализатора, это может быть функцией c ++ 0x.Это правильно - и есть ли способ (на минуту) сделать следующее:
vector<wchar> sBleh = { _T("bleh") };
Наконец, для того, что я хочу достичь с помощью простой процедуры, описанной выше, я был бы лучше с динамически распределенныммассив, или я должен остаться с, казалось бы, негибким вектором wchar?