Можно ли безопасно обрабатывать CString так, как если бы это был простой тип, а не класс, в Visual C ++ 6.0 MFC?

К сожалению, у меня есть (а) оригинальная документация по продукту без каких-либо ошибок (файлы справки MS VC ++ 6.0) или (б) более поздняя справка MSDN, которая применима к более поздним версиям MFC.

Особенно:

[Q1] Является ли оператор += Известно, что глючит в VC ++ 6 MFC CString? Этот код из VC ++ 6 нужно было исправить, прежде чем он даже скомпилируется в современном приложении MFC:

    CString szTemp;
unsigned char m_chReceive[MY_BUF_SIZE];

// compiles and seems to run but may be buggy in VC++6, won't compile in modern MFC
szTemp += m_chReceive;
// the above won't compile in modern MFC versions, but this "&+cast" does:
szTemp.Append( (const char *)&m_chReceive[0]);
[Q2] Безопасно ли и надежно ли возвращать CString как результат функции, таким образом, или это вызывает повреждение памяти?

 CString MyClass:MyMethod(void)
{   CString Stuff;
// set a value to Stuff here.
return Stuff; // return a stack-allocated-CString
}

У меня есть код, который использует две вышеупомянутые вещи повсеместно и который также, кажется, демонстрирует случайное повреждение памяти во время выполнения. Для меня эти две вещи — красные флаги, я прав, подозревая, что авторы MFC в Visual C ++ 6.0 предполагали, что CString будет хорошей простой вещью, которую можно использовать, как int или char типа, и вернуть его из функции и каким-то образом копировать конструкторы и управление памятью все просто работало?

Очевидные вещи: Да, конечно Я получу весь свой код от VC ++ 6.0, когда смогу, но сначала мне нужно будет исправить производственную систему, которая рушится, а затем я могу начать огромную задачу по продвижению этой унаследованной кодовой базы вперед.

0

Решение

В соответствии с Документация для VC6.0

Объекты CString могут расти в результате операций конкатенации.
Объекты CString следуют «семантике значений».

1

Другие решения

Документация Microsoft кажется, указывает на то, что CString по назначению похож на std::string в том смысле, что он растет автоматически, когда это необходимо, и его можно безопасно передавать как аргументы или возвращаемые значения функций.

0

По вопросам рекламы [email protected]