Здравствуйте, sidorov18, Вы писали:
S>Здравствуйте, AlexandrRya, Вы писали:
AR>>Как правильно освободить память в таком случае:
AR>>AR>>APT_UString *uKeys = new APT_UString[keyNum];
AR>>for (int i=0; i < keyNum; i++){
AR>> uKeys[i] = APT_ConvertFromUTF8String(*keys[i]);
AR>>}
AR>>
AR>>Здесь APT_UString — это класс. А функция APT_ConvertFromUTF8String определена следующим образом:
AR>>AR>>APT_DLL_CORE APT_UString APT_ConvertFromUTF8String(const APT_String& str, bool allowSur=true);
AR>>
AR>>То есть я создаю массив объектов APT_UString, а потом присваиваю каждому элементу массива результат выполнения функции, который тоже является объектов APT_UString (не ссылка). Мне кажется, что здесь есть лишние объекты APT_UString, которые не уничтожаются. Как мне лучше сделать инициализацию и удаление объектов?
S>вы про
S>S>delete[] uKeys;
S>
S>?
S>еще для этого можно std::vector использовать — тогда он сам будет все удалять
да-да. Я про delete[] uKeys. Вопрос в том, что в коде
APT_UString *uKeys = new APT_UString[keyNum];
for (int i=0; i < keyNum; i++){
uKeys[i] = APT_ConvertFromUTF8String(*keys[i]);
}
delete[] uKeys;
есть утечки памяти или нет?
Про различные библиотеки типа Boost и даже std я знаю. Но использовать их не хочу: это компонент для другой программы, которая ставится на серверы под совершенно различные платформы. И не хочется потом бороться с тонкостями реализации std в разных системах, а уж тем более компилировать boost ради сишника размером в пару килобайт.