Click here to Skip to main content
16,011,870 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: constant String Memory Usage Pin
Walter Gildersleeve18-Jan-01 1:05
Walter Gildersleeve18-Jan-01 1:05 
GeneralRe: constant String Memory Usage Pin
Jim Howard18-Jan-01 5:20
Jim Howard18-Jan-01 5:20 
GeneralRe: constant String Memory Usage Pin
Ghazi H. Wadi18-Jan-01 6:30
Ghazi H. Wadi18-Jan-01 6:30 
GeneralRe: constant String Memory Usage Pin
Jim Howard18-Jan-01 6:50
Jim Howard18-Jan-01 6:50 
GeneralRe: constant String Memory Usage Pin
Ghazi H. Wadi18-Jan-01 7:22
Ghazi H. Wadi18-Jan-01 7:22 
GeneralRe: constant String Memory Usage Pin
Erik Funkenbusch18-Jan-01 10:53
Erik Funkenbusch18-Jan-01 10:53 
GeneralJihad! GetBuffer/ReleaseBuffer considered Evil Pin
Jim Howard18-Jan-01 11:29
Jim Howard18-Jan-01 11:29 
GeneralJihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
Jim Howard18-Jan-01 12:08
Jim Howard18-Jan-01 12:08 
After writing the above rant, I pulled out my battered copy of Mike Blaszczak's seminal book "MFC 4 Programming with Visual C++" and looked up his discussion of GetBuffer/Release buffer.

He starts with a horrendous example:

<br />
CString str;<br />
LPTSTR pChars = str.GetBuffer(0); //Mike, Mike we hardly knew ye<br />
strcpy(pChars, _T("Hockey"));<br />


He points out in the following text that this kind of code can get you fired.

Then he provides an even more blood chilling example under the heading of "improving efficiency with Releasebuffer()". At least the above example blows up as soon as you touch it. This example actually "works" and is the perfect illustration of how fast down the slippery slope of evil an innocent programmer might slide if he or she partakes even a bite of the GetBuffer apple:

<br />
CString str;<br />
LPTSTR pWork;<br />
int nCount;<br />
<br />
//We have a string class, but lets just snort some external counter <br />
//variables and pointers just to liven up the party!<br />
<br />
//Classes?  Classes?!?  WE DON'T NEED NO STINK'N STRING CLASS!!!!!!!!<br />
pWork = str.GetBuffer(16384);<br />
for(nCount =0; ncount <16384; nCount++)<br />
{<br />
//Pointer arithmetic...Whee!!!!!!! Eat your heart out, Java Dudes!<br />
//If you can't hack this, then just go write some VB, you luzer!!!<br />
*pWork++ = _T('x'); <br />
}<br />
str.ReleaseBuffer(16384); //Cut the red wire, or the blue wire? <br />


Of course he could have just said
CString str(_T('x'),16384); but what fun would that be?

I have to admit I my faith in MikeB was severely shaken by this example, but after taking a nitro pill and allow some time for my hands to stop shaking I continued reading his discussion. After a discussion of the Bad Things that can happen if you screw up the CString buffer, MikeB redeems himself by saying just what I was saying, only he says it a lot better than me:

"The most efficient approach to string intensive work with MFC involves using CString objects to hold your strings. Whenever you need to dynamically construct strings, particularly when you are concatenating them together your best bet is build the string with regular character arrays or dynamically allocated buffers before turning those arrays over to a CString object for safe keeping. (emphasis added)

MikeB, an MFC Deity, has spoken! Who are we mere mortals to contradict him!
Big Grin | :-D

It's a slow day at work today, in case you hadn't guessed that already.
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
Erik Funkenbusch18-Jan-01 12:56
Erik Funkenbusch18-Jan-01 12:56 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
18-Jan-01 13:17
suss18-Jan-01 13:17 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
19-Jan-01 6:28
suss19-Jan-01 6:28 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
Erik Funkenbusch19-Jan-01 19:36
Erik Funkenbusch19-Jan-01 19:36 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
22-Jan-01 4:23
suss22-Jan-01 4:23 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
Erik Funkenbusch22-Jan-01 13:04
Erik Funkenbusch22-Jan-01 13:04 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
James R. Twine30-Jan-01 10:15
James R. Twine30-Jan-01 10:15 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
Erik Funkenbusch31-Jan-01 13:22
Erik Funkenbusch31-Jan-01 13:22 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil - Part II Pin
James R. Twine2-Feb-01 7:17
James R. Twine2-Feb-01 7:17 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Erik Funkenbusch18-Jan-01 13:06
Erik Funkenbusch18-Jan-01 13:06 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Walter Gildersleeve18-Jan-01 20:07
Walter Gildersleeve18-Jan-01 20:07 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Jim Howard22-Jan-01 8:46
Jim Howard22-Jan-01 8:46 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Erik Funkenbusch22-Jan-01 13:39
Erik Funkenbusch22-Jan-01 13:39 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Sven Axelsson25-Jan-01 3:23
Sven Axelsson25-Jan-01 3:23 
GeneralRe: Jihad! GetBuffer/ReleaseBuffer considered Evil Pin
Erik Funkenbusch25-Jan-01 11:55
Erik Funkenbusch25-Jan-01 11:55 
QuestionHow to remove Console App's button from Taskbar? Pin
16-Jan-01 14:24
suss16-Jan-01 14:24 
QuestionWhy does New Class dialog not allow custom classes? Pin
16-Jan-01 14:18
suss16-Jan-01 14:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.