Что делать, если я не позволю ReleaseBuffer после GetBuffer?
От CString до char *, ReleaseBuffer() должен использоваться после GetBuffer(). Но почему? Что произойдет, если я не использую ReleaseBuffer() после GetBuffer()?
Может кто-нибудь показать мне пример? Благодарю.
Ответ 1
Я не уверен, что это приведет к утечке памяти, но вы должны вызвать ReleaseBuffer чтобы убедиться, что закрытые члены CString обновлены. Например, ReleaseBuffer обновит поле длины ReleaseBufferCString путем поиска завершающего null символа.
Ответ 2
Что произойдет, если я не использую ReleaseBuffer() после GetBuffer()?
Я не использовал MFC (и, надеюсь, никогда не придется касаться его полюсом в десять футов), но, как правило, всякий раз, когда у вас есть API, который имеет как GetXXX() и ReleaseXXX() (особенно когда результат GetXXX() удобно имеет тот тип, который ReleaseXXX() - тогда, когда вы забудете вызывать ReleaseXXX() для каждого из ваших GetXXX(), вы GetXXX()XXX.
Ответ 3
Вот пример того, как я использовал CString::GetBuffer() и CString::ReleaseBuffer():