<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4801587393194473591</id><updated>2011-08-27T14:21:07.330+01:00</updated><title type='text'>A developer's blog.</title><subtitle type='html'>This blogs lists some of my daily learned lessons during developing C++ for several platforms (ISO, Boost, Symbian OS) and OOP in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://makomdev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-3400971061765730571</id><published>2011-04-05T08:52:00.000+01:00</published><updated>2011-04-05T08:52:48.261+01:00</updated><title type='text'>Reading suggestion</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves/&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:HyphenationZone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:DoNotPromoteQF/&gt;   &lt;w:LidThemeOther&gt;DE&lt;/w:LidThemeOther&gt;   &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:SplitPgBreakAndParaMark/&gt;    &lt;w:DontVertAlignCellWithSp/&gt;    &lt;w:DontBreakConstrainedForcedTables/&gt;    &lt;w:DontVertAlignInTxbx/&gt;    &lt;w:Word11KerningPairs/&gt;    &lt;w:CachedColBalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:DoNotOptimizeForBrowser/&gt;   &lt;m:mathPr&gt;    &lt;m:mathFont m:val="Cambria Math"/&gt;    &lt;m:brkBin m:val="before"/&gt;    &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;    &lt;m:smallFrac m:val="off"/&gt;    &lt;m:dispDef/&gt;    &lt;m:lMargin m:val="0"/&gt;    &lt;m:rMargin m:val="0"/&gt;    &lt;m:defJc m:val="centerGroup"/&gt;    &lt;m:wrapIndent m:val="1440"/&gt;    &lt;m:intLim m:val="subSup"/&gt;    &lt;m:naryLim m:val="undOvr"/&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"  DefSemiHidden="true" DefQFormat="false" DefPriority="99"  LatentStyleCount="267"&gt;   &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;   &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;   &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;   &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;   &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;   &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;   &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;   &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"   UnhideWhenUsed="false" Name="Table Grid"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;   &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;   &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;   &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;   &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;   &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt; /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;}&lt;/style&gt; &lt;![endif]--&gt;  &lt;br /&gt;&lt;div class="MsoPlainText"&gt;Sometimes its difficult for me (as a developer who thinks object oriented) to read and understand C code. &lt;/div&gt;&lt;div class="MsoPlainText"&gt;Object oriented programming and structural or functional programming are two different worlds.&lt;/div&gt;&lt;div class="MsoPlainText"&gt;After reading this article my view has changed in most ways.&lt;/div&gt;&lt;div class="MsoPlainText"&gt; &lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;a href="http://www.pragprog.com/magazines/2011-03/punk-rock-languages"&gt;http://www.pragprog.com/magazines/2011-03/punk-rock-languages&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-3400971061765730571?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3400971061765730571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3400971061765730571'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2011/04/reading-suggestion.html' title='Reading suggestion'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-6013990508152542010</id><published>2010-11-30T05:45:00.000Z</published><updated>2010-11-30T05:45:46.772Z</updated><title type='text'>What the compiler could mark as an error</title><content type='html'>Never call virtual functions from within constructors of the same class. This can lead to an access violation. The call will be dispatched to the the overridden function. Now imagine there's a derived class which holds this override. In case the base class constructor calls the polymorphic function the dispatch is done before the derived class instance is constructed entirely - slicing. Got it? This function will access fields which are'nt there at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-6013990508152542010?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6013990508152542010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6013990508152542010'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/11/what-compiler-could-mark-as-error.html' title='What the compiler could mark as an error'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2764398995677994047</id><published>2010-04-28T10:43:00.000+01:00</published><updated>2010-04-28T10:43:46.033+01:00</updated><title type='text'>Prozess/Thread</title><content type='html'>Dieser Post ist nur in Deutsch verfügbar. Ist mehr einen Notiz für mich selbst als für andere.&lt;br /&gt;&lt;br /&gt;Prozesse und Threads sind die Basis für Multitasking. &lt;br /&gt;Prozess = Ausführungseinheit mit eigenem Speicher (Heap u. Stack), Jeder  Prozess hat immer mindestens einen Thread (Main-Thread).&lt;br /&gt;&lt;br /&gt;Thread =&amp;nbsp; Jeder Thread hat seinen eigenen Stack.  Threads des selben Proc teilen sich den Heap.&lt;br /&gt;&lt;br /&gt;Multitasking funktioniert mit Kontextswitch. Wird von einem Thread zu einem anderen Thread im selben Prozess gewechselt, werden die Register, Stack, etc. des zu verdrängenden Threads "stored" und die Register, Stack, etc. des verdrängenden Threads "restored". &lt;br /&gt;&lt;br /&gt;Das gleiche wird auch gemacht, wenn von Thread A zu Thread B in unterschiedlichen Prozessen gescheduled wird. Jedoch ist hier zustätzlich noch die Memory Management Unit beteiligt, die den jeweiligen Speicherbereich des Prozesses stored/restored, also erheblich mehr Overhead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2764398995677994047?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2764398995677994047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2764398995677994047'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/04/prozessthread.html' title='Prozess/Thread'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-6839103992012546580</id><published>2010-04-28T10:39:00.005+01:00</published><updated>2010-04-28T10:40:53.317+01:00</updated><title type='text'>More introducing than going into deep - some things you should have heard about when programming OO</title><content type='html'>call by value vs. call by reference&lt;br /&gt;lazy fetching&lt;br /&gt;early fail&lt;br /&gt;trivial construction vs. non-trivial construction&lt;br /&gt;value semantic&lt;br /&gt;shallow copy vs. deep copy&lt;br /&gt;&lt;br /&gt;Some OOP termini and their translation into C++:&lt;br /&gt;1) object owns another object (has a relationship - aka wrapper)&lt;br /&gt;2) object uses another object (uses a relationship)&lt;br /&gt;2a) object reads another object (solved beeing const correct)&lt;br /&gt;2b) object manipulates another object (non const qualified)&lt;br /&gt;3) object "can" use or have another object (weak aggregation - can be solved using pointers)&lt;br /&gt;4) object is a special form of another object (public inheritance)&lt;br /&gt;5) object is a general form of another object (public inheritance)&lt;br /&gt;&lt;br /&gt;declaration (usually done in header files)&lt;br /&gt;definition (usually done in implementaiton files - *.cpp)&lt;br /&gt;initialization (prefer initialization lists - member pointers have to be zero initialized)&lt;br /&gt;&lt;br /&gt;static&lt;br /&gt;non-static&lt;br /&gt;this (why did Bjarne Stroustrup invented this to be a pointer - could'nt it be reference instead?)&lt;br /&gt;const&lt;br /&gt;volatile&lt;br /&gt;&lt;br /&gt;buildin types vs. custom types&lt;br /&gt;&lt;br /&gt;This list is more a collection of notes for myself but I had no clue where to put it elsewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-6839103992012546580?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6839103992012546580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6839103992012546580'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/04/more-introducing-than-going-into-deep.html' title='More introducing than going into deep - some things you should have heard about when programming OO'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7935934156282125413</id><published>2010-03-01T12:43:00.000Z</published><updated>2010-03-01T12:43:33.798Z</updated><title type='text'>Comments disabled</title><content type='html'>During the past weeks and months I have recognized comments written in some far east language. That's the reason for disabling this feature. It is unclear if it will be enabled again.&lt;br /&gt;&lt;br /&gt;If someone wants to give a comment for a particular post he or she can send me an email and I will try to consider the comment in the belonging post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7935934156282125413?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7935934156282125413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7935934156282125413'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/03/comments-disabled.html' title='Comments disabled'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2760366803215411270</id><published>2010-02-22T13:28:00.002Z</published><updated>2010-02-22T13:30:14.318Z</updated><title type='text'>Swapping</title><content type='html'>TPtr8::Swap() can be seen as Symbian aquivalent to std::swap(). If the advantages of "swapping"  are not clear I will give some example(s) later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2760366803215411270?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2760366803215411270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2760366803215411270'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/02/swapping.html' title='Swapping'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-1550311896762111911</id><published>2010-01-13T09:21:00.003Z</published><updated>2010-01-13T09:31:13.178Z</updated><title type='text'>Which STL container fits best?</title><content type='html'>Yesterday I stumbled upon a very nice &lt;a href="http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container"&gt;diagram&lt;/a&gt;. Its a decision graph for getting the best fitting STL container for certain needs.&lt;br /&gt;&lt;br /&gt;I really like two comments on &lt;a href="http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container"&gt;this page&lt;/a&gt;.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simple answer:  use vector&lt;&gt; for everything unless you have a real reason to do otherwise.&lt;/li&gt;&lt;li&gt;One lesson i've learned is, try to wrap it in a class, since changing the container type one fine day can yield in to big surprises.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-1550311896762111911?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1550311896762111911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1550311896762111911'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2010/01/which-stl-container-fits-best.html' title='Which STL container fits best?'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-1147156569820561215</id><published>2009-06-16T11:21:00.005+01:00</published><updated>2009-06-16T11:58:25.169+01:00</updated><title type='text'>Releasing Resources Is Destruction</title><content type='html'>Nearly everybody knows the popular design pattern RAII (Resource Aquisition Is Initialization).&lt;br /&gt;In short: when getting a resource it has to be bound to a certain object (in C++ known as Smartpointers e.g. std::auto_ptr&lt;&gt;).&lt;br /&gt;&lt;br /&gt;The clue is that releasing the resource is handled automatically through destruction of the management object. So this popular design pattern could also be called &lt;span style="font-weight: bold;"&gt;Releasing Resources Is Destruction (RRID)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;When writing standard C++ applications it is ensured that stack located objects are destroyed via stack unwind in case the function  returns normally (not by an exception). In Symbian OS C++ this is the case too. But what happens in case of an irregular return from a function (in case of an exception)?&lt;br /&gt;&lt;br /&gt;In Standard C++ the compiler generates an unwind list for every function that creates objects on the stack. This unwind list is processed in case of an exception. So the created objects are destroyed. In Symbian OS before v9.1 such an unwind list simply did not exist. So POD types were simply deallocated (no destructor was called). But NonPOD types have to be pushed onto Symbian OS' so called CleanupStack. This stack is processed in case of an exception (and only in case of an exception). I never knew why the compiler implementers didn't implement CleanupStack unwind in case of regular returning from a function. But that's not the topic here.&lt;br /&gt;&lt;br /&gt;The change since Symbian OS v9.1 is that the compiler generates an unwind list for functions which create objects on the stack and during stack unwind in case of an exception these objects are destroyed correctly (with a call to the destructor). This is why the &lt;a href="http://developer.symbian.com/main/downloads/papers/auto_ptr/auto_ptr.pdf"&gt;auto_ptr&lt;&gt; class template&lt;/a&gt; is working nicely for Symbian OS v9.1 and later without the TCleanupItem object (see chapter 1.4 in the mentioned PDF).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-1147156569820561215?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1147156569820561215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1147156569820561215'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2009/06/releasing-resources-is-destruction.html' title='Releasing Resources Is Destruction'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-1646441872369874329</id><published>2009-04-03T09:11:00.001+01:00</published><updated>2009-04-03T09:12:39.722+01:00</updated><title type='text'>Usefull CIdle in RunL() of a CActive derived class.</title><content type='html'>The main purpose for which I am using instances of CIdle is in the RunL() method of a CActive derived class.&lt;br /&gt;&lt;br /&gt;Everywhere you read that a RunL() method has to complete as fast as possible for not blocking incoming events for other CActive derived instances. But how can this be achieved?&lt;br /&gt;&lt;br /&gt;The solution is to "wind up" a dispatcher in the RunL() method.&lt;br /&gt;For this the CActive derived class has to aggregate a member of type CIdle*.&lt;br /&gt;In the body of RunL() the following code is implemented.&lt;br /&gt;&lt;br /&gt;void CMyCActiveDerived::RunL()&lt;br /&gt;{&lt;br /&gt; /* ... some handle code ... */&lt;br /&gt;&lt;br /&gt; if (!iDispatcher) iDispatcher = CIdle::NewL(CActive::EPriorityNormal);&lt;br /&gt; else iDispatcher-&gt;Cancel();&lt;br /&gt; iDispatcher-&gt;Start(TCallBack(EventHandlerL, this));&lt;br /&gt;&lt;br /&gt; /* ... some optional code ... */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The CActive derived class has to provide a static EventHandlerL method. Optional you can use any static member function from any other class. The second argument of the temporary created TCallBack instance is a pointer of any type (a void* ;-))&lt;br /&gt;&lt;br /&gt;The advantage: The current stack frame is destroyed and the event handler code is called in a delayed way. That's decoupling.&lt;br /&gt;&lt;br /&gt;Any comments appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-1646441872369874329?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1646441872369874329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1646441872369874329'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2009/04/usefull-cidle-in-runl-of-cactive.html' title='Usefull CIdle in RunL() of a CActive derived class.'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-6727021336160393782</id><published>2009-01-20T20:10:00.003Z</published><updated>2009-01-20T20:18:23.714Z</updated><title type='text'>Sad about bankruptcy of UIQ Technology</title><content type='html'>I am sad that UIQ could not make it through this crysis because I always liked developing for this platform.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mobilephonedevelopment.com/archives/743"&gt;Simons Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-6727021336160393782?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6727021336160393782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6727021336160393782'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2009/01/sad-about-bankruptcy-of-uiq-technology.html' title='Sad about bankruptcy of UIQ Technology'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7956332816124253663</id><published>2008-12-02T11:43:00.004Z</published><updated>2008-12-02T11:46:59.553Z</updated><title type='text'>Accredited Symbian Developer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tcAlBf8shz0/STUfndrINAI/AAAAAAAAAmU/ZNQjEMeTH6Q/s1600-h/ASDlogo140x140.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 140px; height: 140px;" src="http://1.bp.blogspot.com/_tcAlBf8shz0/STUfndrINAI/AAAAAAAAAmU/ZNQjEMeTH6Q/s320/ASDlogo140x140.png" alt="" id="BLOGGER_PHOTO_ID_5275157301375284226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Today I did the exam. After 120 minutes and 48 questions I am an official Accredited Symbian Developer now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7956332816124253663?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7956332816124253663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7956332816124253663'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/12/accredited-symbian-developer.html' title='Accredited Symbian Developer'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tcAlBf8shz0/STUfndrINAI/AAAAAAAAAmU/ZNQjEMeTH6Q/s72-c/ASDlogo140x140.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2195622660956385748</id><published>2008-11-06T14:46:00.003Z</published><updated>2008-11-06T14:53:07.290Z</updated><title type='text'>Forward declaration aka prototyping</title><content type='html'>Something you have to keep in mind:&lt;br /&gt;&lt;br /&gt;Forward declarations in header files are only possible if the header file only contains reference or pointer types of the forward declared type.&lt;br /&gt;&lt;br /&gt;Another thing you can have a typedef to a container of custom value types (e.g. typedef RPointerArray&lt;tcustom&gt; RMyArray;) somewhere in the headerfile custom.h. Your compiler will give you errors if you only prototyp the RMyArray in another headerfile special.h even if the headerfile only uses references or pointer types of RMyArray (RMyArray&amp;amp; or RMyArray*)&lt;br /&gt;&lt;br /&gt;The solution is that you have to include custom.h at the beginning of special.h.&lt;br /&gt;&lt;br /&gt;But this was a hard way to find out. *puh*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2195622660956385748?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2195622660956385748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2195622660956385748'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/11/forward-declaration-aka-prototyping.html' title='Forward declaration aka prototyping'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-1194114541612007980</id><published>2008-10-30T08:43:00.001Z</published><updated>2008-10-30T08:45:15.186Z</updated><title type='text'>Symbian OS Internals</title><content type='html'>The Symbian OS kernel explained in this free &lt;a href="https://developer.symbian.com/wiki/display/ppg/Symbian+OS+Internals"&gt;online book&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-1194114541612007980?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1194114541612007980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1194114541612007980'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/10/symbian-os-internals.html' title='Symbian OS Internals'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-4055970033104245426</id><published>2008-10-13T10:00:00.008+01:00</published><updated>2008-10-13T10:15:09.724+01:00</updated><title type='text'>Don't mix "const TDesC&amp;" and "TPtrC"</title><content type='html'>As TPtrC can be seen as a &lt;span style="font-weight: bold;"&gt;constant quasi reference to a descriptor&lt;/span&gt;. Don't mix it with the real reference type for descriptors &lt;span style="font-weight: bold;"&gt;TDesC&amp;amp;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Attention wrong sample code:&lt;br /&gt;const TDesC&amp;amp; GetDescriptor() const&lt;br /&gt;{&lt;br /&gt;_LIT(KDescriptor, "Hello");&lt;br /&gt;TPtrC des(KDescriptor);&lt;br /&gt;return des;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This is a programming error: "Returning a reference to a locale variable." Which results in a runtime error (panic).&lt;br /&gt;&lt;br /&gt;Rule: Don't you ever return a &lt;span style="font-weight: bold;"&gt;TPtrC &lt;/span&gt;when your function returns a &lt;span style="font-weight: bold;"&gt;const TDesC&amp;amp;&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;The problem here is, that often you don't see that &lt;span style="font-style: italic;"&gt;des &lt;/span&gt;is a &lt;span style="font-weight: bold;"&gt;TPtrC&lt;/span&gt;! E.g. when &lt;span style="font-style: italic;"&gt;GetDescriptor() &lt;/span&gt;calls another function which returns a &lt;span style="font-weight: bold;"&gt;TPtrC&lt;/span&gt;! So you have to be patient.&lt;br /&gt;&lt;br /&gt;Solution: Your function has to return a copy of the &lt;span style="font-weight: bold;"&gt;TPtrC&lt;/span&gt;. And the prototype of the function looks like this:&lt;br /&gt;TPtrC GetDescriptor() const;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-4055970033104245426?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/4055970033104245426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/4055970033104245426'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/10/dont-mix-const-tdesc-and-tptrc.html' title='Don&apos;t mix &quot;const TDesC&amp;&quot; and &quot;TPtrC&quot;'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7757429627445893063</id><published>2008-10-09T09:32:00.002+01:00</published><updated>2008-10-09T09:37:14.673+01:00</updated><title type='text'>UIQ3 Book online</title><content type='html'>&lt;a href="http://books.uiq.com/index.php/Main_Page"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;Here&lt;/a&gt; is the complete online book for developing for the UIQ3 platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7757429627445893063?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7757429627445893063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7757429627445893063'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/10/uiq3-book-online.html' title='UIQ3 Book online'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-5216709019508376916</id><published>2008-06-19T11:41:00.007+01:00</published><updated>2008-07-02T09:03:22.103+01:00</updated><title type='text'>On device debugging S60 applications</title><content type='html'>Sorry for posting this topic so long after my anouncement &lt;a href="http://makomdev.blogspot.com/2008/01/first-impressions-on-odd.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But finally I could evaluate the on device debugging (ODD) functionality of Carbide.C++ 1.3.1. with 2 S60 SDKs: the 3rd MR SDK and the S60 3rd FP1 SDK.&lt;br /&gt;&lt;br /&gt;First the ODD feature works with some minor disadvantages. Second you need at least a Carbide Developer license (which costs about 300€ in the Nokia e-Store). I could test it with an evaluation license.&lt;br /&gt;&lt;br /&gt;Didn't work:&lt;br /&gt;- dereferencing of the &lt;span style="font-weight: bold;"&gt;this &lt;/span&gt;pointer in the scope of a non static member function could not be done (members could not be examined)&lt;br /&gt;- automatic descriptor variables could not be evaluated in the scope of a function (content could not be examined)&lt;br /&gt;&lt;br /&gt;Worked great:&lt;br /&gt;- debugging of an import library (aka static link library)&lt;br /&gt;-&lt;br /&gt;&lt;br /&gt;Here comes a short step by step guide for debugging a simple application on device:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install App TRK on your Symbian S60 phone (you can find it &lt;a href="http://tools.ext.nokia.com/agents/index.htm"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ensure the phone is connected to the computer and is connected via Nokia-PC-Suite too.&lt;/li&gt;&lt;li&gt;Ensure your application is buildable  for WINS emulator with Carbide.C++ IDE.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Switch the Build condiguration to GCCE (debug) you can use the S60 3rd MR or FP1 according to the device you are using (e.g. an E60 uses the MR SDK, an E90 uses the FP1 SDK). You can reach the build configuration dialog by right clicking on the project.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on the project, select "Open debug dialog", ensure there is nothing preconfigured under "Symbian OS Application TRK". If there is something preconfigured you can delete this subitem by clicking the red cross above that dialog. This step has only be done the first time. Every other step OOD session you can use the following configuration.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Close the debug dialog&lt;/li&gt;&lt;li&gt;Right click on the project, select Properties.&lt;/li&gt;&lt;li&gt;Select Carbide.C++ subitem in the properties dialog. And after this the Carbide Build configuration subitem.&lt;/li&gt;&lt;li&gt;Select the desired configuration. I use "Phone Debug (GCCE) [S60_3rd_FP1] because I use an E90 for ODD.&lt;/li&gt;&lt;li&gt;In the below "Sis builder tab" add a new entry by clicking on the "Add" button&lt;/li&gt;&lt;li&gt;In the following dialog browse to the location of your projects package file (pkg extension)&lt;/li&gt;&lt;li&gt;Insert an output filename (insert: &lt;projetname&gt;.sis)&lt;/li&gt;&lt;li&gt;Leave content search location empty&lt;/li&gt;&lt;li&gt;Because I have a developer certificate from Symbian, I use "sign sis file with a certificate/key pair"&lt;/li&gt;&lt;li&gt;The signed sis file name will be: "&lt;projectname&gt;.sisx" (recognize the trailing x)&lt;/li&gt;&lt;li&gt;Insert the password for the "signsis" procedure&lt;/li&gt;&lt;li&gt;Leave additional options empty&lt;/li&gt;&lt;li&gt;Browse to the location of your certificate file (.cer extension)&lt;/li&gt;&lt;li&gt;Browse to the location of your key file (.key extension)&lt;/li&gt;&lt;li&gt;You can now build your project for the target. Rightclick on project and select "build project"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Observe the console output: after a successfull build a successfull makesis step is performed and after this a successfull signsis step&lt;/li&gt;&lt;li&gt;You are now ready for debugging. Rightclick on project, select "debug as"  &gt; "Debug symbian application".&lt;/li&gt;&lt;li&gt;A dialog shows up "New launch configuration", select "Application TRK Launch Configuration" &gt; "Next"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ensure the correct exe is preselected in the "Process to launch" selection box. "Next"&lt;/li&gt;&lt;li&gt;Select the correct COM port for your device connection. Usually after the COM port the name of the device is shown. In my case I select "COM 14 - Nokia E90 Communicator USB" &gt; "Next"&lt;/li&gt;&lt;li&gt;Ensure the correct sis file is preselected. You can do this by comparing the filepath with the files in this directory. During step 21 the sisx file was placed in the folder \projectpath\sis\project.sisx. Simply check if both paths (the preselected and the real path in your filesystem)  are the same. "Next"&lt;/li&gt;&lt;li&gt;"Finish", the debug session is started and the application shows up on your phone.&lt;/li&gt;&lt;li&gt;If you have put a breakpoints within your sourcecode the processing is stopped here and you can debug ;-)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The steps 15 - 19 should be known from signing a sis file on command line. You can do it in another way when not signing a file or signing a file with a selfsign certificate.&lt;br /&gt;&lt;br /&gt;I hope this post is helpfull. Any feedback is appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-5216709019508376916?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/5216709019508376916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/5216709019508376916'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/06/on-device-debugging-s60-applications.html' title='On device debugging S60 applications'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-8059656233971555671</id><published>2008-06-02T11:36:00.003+01:00</published><updated>2008-06-02T11:44:00.257+01:00</updated><title type='text'>Deinstalling/Installing S60 3rd SDK</title><content type='html'>When deinstalling the SDK for Nokias S60 3rd platform the registry key &lt;span style="font-weight: bold;"&gt;HKLM/Software/Nokia/com.nokia.s60/Instances&lt;/span&gt; contains the count of the installed SDKs. This registry key is not set back to 0. So when installing the SDK again the instance key is increased by 1. But the installation path suggested by the installer now contains a _2.&lt;br /&gt;&lt;br /&gt;For avoiding this you can manually reset the instance key to 0 after deinstallation and do a fine new installation rightafter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-8059656233971555671?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8059656233971555671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8059656233971555671'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/06/deinstallinginstalling-s60-3rd-sdk.html' title='Deinstalling/Installing S60 3rd SDK'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2124338361869084752</id><published>2008-04-24T10:49:00.006+01:00</published><updated>2008-04-24T12:47:50.323+01:00</updated><title type='text'>Object oriented relations and its implementation in C++</title><content type='html'>Object oriented relations and its implementation in C++:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Has a - aka composition&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is implemented with member variables. If the member is heap allocated then the implementation happens with pointers. In this case the pointee object has to be destroyed when the aggregator is destroyed.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Uses a - aka aggregation&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is implemented with member variables of type "reference (&amp;amp;)". When the aggregator is destroyed the aggregates are &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;destroyed.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Can use a - aka weak aggregation&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is implemented with member variables of type "pointer (*)" but the pointer is initialized "empty" (with NULL) and set &lt;span style="font-weight: bold;"&gt;later &lt;/span&gt;to point to a certain object. When the aggregator is destroyed the aggregates are &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;destroyed.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Is a - aka inheritance&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Public inheritance (all public members of the base class are accessible by a user of the derived class).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Private inheritance (all public members of the base class are hidden from the user of the derived class). This kind of inheritance is used for providing a "new" interface. It is also known as "class &lt;span style="font-style: italic;"&gt;Derived&lt;/span&gt; is implemented in terms of class &lt;span style="font-style: italic;"&gt;Base&lt;/span&gt;". &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2124338361869084752?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2124338361869084752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2124338361869084752'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/04/object-oriented-relations-and-its.html' title='Object oriented relations and its implementation in C++'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-919079766927481714</id><published>2008-04-04T08:47:00.002+01:00</published><updated>2008-04-07T11:24:40.521+01:00</updated><title type='text'>C++: static types vs. dynamic types</title><content type='html'>When using polymorphic types it is good to know the difference between the terms dynamic type and static type.&lt;br /&gt;An object can have booth kind of types. The static type is an objects "real" type whereas the dynamic type is a "base class" type.&lt;br /&gt;&lt;br /&gt;Base* pObj = new Derived();    // *pObj's static type is "Derived" whereas the dynamic type is "Base"&lt;br /&gt;&lt;br /&gt;Easy spoken: the static type is the real type of the object (right hand side type) and the dynamic type is the polymorphic type (left hand side type).&lt;br /&gt;&lt;br /&gt;Polymorphy can only be done with types of pointers or references. Casting between static and dynamic type is usually done with C++ dynamic_cast&lt;&gt; opererator. This cast performs a runtime check for ensuring the Base class pointer can be casted into the specified Derived class pointer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-919079766927481714?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/919079766927481714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/919079766927481714'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/04/c-static-types-vs-dynamic-types.html' title='C++: static types vs. dynamic types'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-931489809929196456</id><published>2008-03-27T22:28:00.004Z</published><updated>2008-03-27T22:48:46.397Z</updated><title type='text'>Some things to keep in mind when using a CActive derived class as a proxy</title><content type='html'>For some reasons I needed a CActive derived class as a proxy. Being more clear a CActive derived class (A) instance didn't issue the asynchronous request to the Asynchronous Service Provider (ASP) directly instead it issues an asynchronous request to another CActive derived class (B) instance which issues the asynchronous request to the ASP. For this B has to provide an asynchronous request function which takes a reference to A::iStatus as parameter.&lt;br /&gt;Within that function B issues the asynchronous request to the ASP passing in its own iStatus instance. After that (and I mean &lt;span style="font-weight: bold;"&gt;after&lt;/span&gt; - not before) the B instance has to set A::iStatus to KRequestPending and store a pointer to A::iStatus in an own member variable (e.g. B::iCallerStatus).&lt;br /&gt;&lt;br /&gt;The reason why I mentioned the after is in case of an exception thrown by calling ASP::AsyncRequestL() the A::iStatus whould be pending and the Active Scheduler finds an iStatus pending without having an appropriate object "SetActive()". This results in a classic stray signal panic.&lt;br /&gt;&lt;br /&gt;When the asynchronous request is completed by the ASP - B::RunL() is called and B::iStatus can be evaluated. In this case the outstanding request of the class A instance is completed via a call to User::RequestComplete(iCallerStatus, iStatus.Int()); It is good practise to check iCallerStatus against NULL before completing.&lt;br /&gt;Rightafter A::RunL() is called and A::iStatus can now be evaluated.&lt;br /&gt;&lt;br /&gt;The details with issuing asynchronous requests are explained in several SDK documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-931489809929196456?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/931489809929196456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/931489809929196456'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/03/cactive-derived-class-as-proxy.html' title='Some things to keep in mind when using a CActive derived class as a proxy'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7701383839213699963</id><published>2008-02-28T15:38:00.003Z</published><updated>2008-02-28T15:48:21.596Z</updated><title type='text'>Assertion statements</title><content type='html'>Symbian OS C++ has some nice assertion macros (__ASSERT_ALWAYS() and __ASSERT_DEBUG()). These can be used to make assertions in your code. Being more clear: To ensure that an expression is true (e.g. a pointer is valid). This expression is placed in the first argument of the assertion. The second argument specifies what is performed when the assertion evaluates to false. Here you can place a panic calling function or throw an exception or do whatever you want. &lt;span style="font-weight: bold;"&gt;Good style&lt;/span&gt; is not to place code with &lt;span style="font-weight: bold;"&gt;sideeffects&lt;/span&gt; into an assertion. That means neither the left value nor a right value within the expression is changed. E.g. an &lt;span style="font-weight: bold;"&gt;evaluation &lt;/span&gt;is an expression without sideeffects wereas an &lt;span style="font-weight: bold;"&gt;assignment &lt;/span&gt;is an expression with a sideeffect to the left value.&lt;br /&gt;&lt;br /&gt;The assertion macros can be easily coded for usage on other platforms which use C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7701383839213699963?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7701383839213699963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7701383839213699963'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/02/assertion-statements.html' title='Assertion statements'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-8523303751565380878</id><published>2008-01-31T10:04:00.000Z</published><updated>2008-01-31T10:15:07.130Z</updated><title type='text'>First impressions on ODD</title><content type='html'>After testing the RC1 of the Carbide.C++ IDE for 3 days I could gain first impressions on On-Device-Debugging (ODD):&lt;ul&gt;&lt;li&gt;before starting the debug session the application has to be signed and installed onto the device - this is easily handled by the IDE (debug options build configuration and sis builder)&lt;/li&gt;&lt;li&gt;after that I could debug a console application very easily&lt;/li&gt;&lt;li&gt;I have linked the application against a static link library but when trying to "step into" a  function the debugger "stepped over" it :(&lt;/li&gt;&lt;li&gt;I also tried to debug a GUI application for Nokia's S60 platform but in this case no breakpoints were reached and the debug session behaved like I was running the application in "non-debug-mode"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;so debugging via cable worked fine for me&lt;br /&gt;&lt;/li&gt;&lt;li&gt;next things I will test are:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;debugging via Bluetooth (BT)&lt;/li&gt;&lt;li&gt;debugging a UIQ3 application on device&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-8523303751565380878?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8523303751565380878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8523303751565380878'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/01/first-impressions-on-odd.html' title='First impressions on ODD'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2817993927332034136</id><published>2008-01-29T08:56:00.000Z</published><updated>2008-01-29T09:25:08.116Z</updated><title type='text'>Release Candidate 1 for Carbide.C++ is available for download</title><content type='html'>As you can read &lt;a href="http://groups.google.de/group/carbidecpp-beta?hl=de"&gt;here&lt;/a&gt; the Carbide.C++ IDE Version 1.3 development reaches its final state.&lt;br /&gt;I will check out On-Device-Debugging as soon as I can and post my comments here.&lt;br /&gt;&lt;a href="http://groups.google.de/group/carbidecpp-beta?hl=de"&gt; &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2817993927332034136?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2817993927332034136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2817993927332034136'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2008/01/release-candidate-1-for-carbidec-is.html' title='Release Candidate 1 for Carbide.C++ is available for download'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-203426286762814085</id><published>2007-12-13T13:04:00.001Z</published><updated>2007-12-13T13:07:00.603Z</updated><title type='text'>static and const member functions</title><content type='html'>A &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;member function ensures at compiletime that this member function does not change an instance of its class.&lt;br /&gt;A &lt;span style="font-weight: bold;"&gt;static&lt;/span&gt; member function does not has the dynamic aspects of an instance of the class because it has no &lt;span style="font-weight: bold;"&gt;this&lt;/span&gt; pointer. So it has the same behaviour for all objects (instances).&lt;br /&gt;&lt;br /&gt;When designing a new class you have to provide a set of member functions this class has. It is so called &lt;span style="font-style: italic;"&gt;good style&lt;/span&gt; to set all member functions which do not "need" the &lt;span style="font-weight: bold;"&gt;this&lt;/span&gt; pointer to be &lt;span style="font-weight: bold;"&gt;static &lt;/span&gt;functions. All &lt;span style="font-weight: bold;"&gt;non-static&lt;/span&gt; member functions have to be &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;or &lt;span style="font-weight: bold;"&gt;non-const&lt;/span&gt;. So when a function does not change the object make it a &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;function! Keep in mind that &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;functions are only allowed to call other &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;functions of that class, otherwise your compiler will grumble!&lt;br /&gt;&lt;br /&gt;Not using &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;static &lt;/span&gt;is &lt;span style="font-style: italic;"&gt;bad style&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-203426286762814085?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/203426286762814085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/203426286762814085'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/12/blog-post.html' title='static and const member functions'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-9050951092794020433</id><published>2007-11-19T09:35:00.000Z</published><updated>2007-11-19T09:42:00.128Z</updated><title type='text'>Carbide.C++ 1.3 Beta is ready for testing</title><content type='html'>As Mike Trujillo announces on &lt;a href="http://groups.google.com/group/carbidecpp-beta"&gt;Carbide.C++ google&lt;/a&gt;&lt;a href="http://groups.google.com/group/carbidecpp-beta"&gt; group&lt;/a&gt; the version 1.3 of the Carbide beta is &lt;a href="http://tools.ext.nokia.com/download/beta_build.php"&gt;downloadable&lt;/a&gt; for testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-9050951092794020433?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/9050951092794020433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/9050951092794020433'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/11/carbidec-13-beta-is-ready-for-testing.html' title='Carbide.C++ 1.3 Beta is ready for testing'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-6399890267358834003</id><published>2007-11-12T10:28:00.000Z</published><updated>2007-11-12T10:39:54.698Z</updated><title type='text'>Tutorial on NewLC</title><content type='html'>I have published my first tutorial on &lt;a href="http://www.newlc.com/"&gt;NewLC&lt;/a&gt;. It is about a templated class for automatic cleanup of Symbian OS' typical R classes. You can find the tutorial &lt;a href="http://www.newlc.com/auto-cleanup-auto-ptr-equivalent-r-classes"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.newlc.com/"&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.newlc.com/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-6399890267358834003?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6399890267358834003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/6399890267358834003'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/11/tutorial-on-newlc.html' title='Tutorial on NewLC'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-8936688754937236177</id><published>2007-11-01T09:01:00.000Z</published><updated>2007-11-08T09:20:30.586Z</updated><title type='text'>Never instanciate R classes on the heap directly</title><content type='html'>A Symbian R class can be seen as a "handle to a resource". Some examples: RBuf is a resource handle to a buffer. RSocket is a handle to a "socket" resource provided by the RSockServ which is also a handle to a resouce aka the socket server. It does not make sense to instanciate such a class on the heap because instanciation on the stack works well. There is no necessity to do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-8936688754937236177?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8936688754937236177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/8936688754937236177'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/11/never-instanciate-r-classes-on-heap.html' title='Never instanciate R classes on the heap directly'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-3440223004797820029</id><published>2007-08-15T11:08:00.001+01:00</published><updated>2007-08-15T11:12:13.724+01:00</updated><title type='text'>Difference between overloading and overriding</title><content type='html'>Overloading and overriding explains how a member function is bound to its object. Both kind of functions are dynamically bound to its object. Overloaded functions are horizontally bound while overridden functions are vertically bound. Horizontally and vertically is related to the inheritance hierarchy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-3440223004797820029?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3440223004797820029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3440223004797820029'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/08/difference-between-overloading-and.html' title='Difference between overloading and overriding'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-1715264826253202435</id><published>2007-07-05T08:40:00.000+01:00</published><updated>2007-07-05T08:44:31.347+01:00</updated><title type='text'>The ten commandments for C programmers</title><content type='html'>Found &lt;a href='http://www.plethora.net/~seebs/c/10com.txt'&gt;here&lt;/a&gt;. Keep this in mind when developing for C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-1715264826253202435?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1715264826253202435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/1715264826253202435'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/07/ten-commandments-for-c-programmers.html' title='The ten commandments for C programmers'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-51410867318911451</id><published>2007-06-12T10:28:00.000+01:00</published><updated>2007-06-12T10:33:09.431+01:00</updated><title type='text'>Nice introduction into Symbian OS C++</title><content type='html'>I found a nice introductory presentation into programming C++ under Symbian OS. It can be found &lt;a href="http://www.symbianresources.com/tutorials/basics/memory/MemoryManagement.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-51410867318911451?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/51410867318911451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/51410867318911451'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/06/nice-introduction-into-symbian-os-c.html' title='Nice introduction into Symbian OS C++'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-3504209438631786863</id><published>2007-05-31T11:46:00.000+01:00</published><updated>2007-05-31T11:52:23.577+01:00</updated><title type='text'>Client Server Framework messages</title><content type='html'>When using Symbian OS's Client-Server-Framework there is something you have to keep in mind when working with messages (RMessage2):&lt;br /&gt;&lt;br /&gt;If a client makes an asynchronous request to the server. The server signals completion on the RMessage2 instance (message 1) when he has finished the asynchronous request. For cancellation of this asynchronous request the client can send another request to the server (message 2). This completes immediately and forces the server to shutdown/cancel all its outstanding requests. After this has been done the server signals message 1 for completion. For making all this working the server has to store a copy of the message 1 and not a reference/pointer! By the way the type RMessage2 is a handle to a kernel side message instance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-3504209438631786863?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3504209438631786863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3504209438631786863'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/client-server-framework-messages.html' title='Client Server Framework messages'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7981771399706187703</id><published>2007-05-31T11:27:00.000+01:00</published><updated>2007-05-31T11:44:13.006+01:00</updated><title type='text'>CBase derived member variables</title><content type='html'>A CBase derived member variable has to be cleaned up correctly. If it is a member variable of another CBase derived class it has to be cleaned up in the class's destructor via a call to "delete iMember;" this works correctly without any checks independently if the pointer owns memory or is &lt;span style="font-weight: bold;"&gt;NULL&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;CBase derived members are zero initialized during construction of the owning CBase derived class. If a &lt;span style="font-weight: bold;"&gt;non&lt;/span&gt; CBase derived class owns a CBase derived member the pointer has to be zero initialized explicitly (commonly in the constructors initialization list) and the owned resources have to be freed in a Release/Close function by a call to "delete iMember;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7981771399706187703?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7981771399706187703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7981771399706187703'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/creation-and-cleanup-on-cbase-derived.html' title='CBase derived member variables'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-7735292603137259593</id><published>2007-05-23T10:12:00.000+01:00</published><updated>2007-05-23T10:23:25.410+01:00</updated><title type='text'>Asynchronous service provider</title><content type='html'>An &lt;span style="font-style: italic;"&gt;asynchronous service provider &lt;/span&gt;(ASP) has to store a reference (better is a pointer) to the callers TRequestStatus variable as its own member variable. In most cases the caller of an asynchronous function is an Active Object (AO) which has a TRequestStatus membervariable. Storing a pointer is better so it does not have to be intialized when constructing the ASP object. When calling the ASP's asynchronous function the reference/pointer to the caller's TRequestStatus is set to &lt;span style="font-weight: bold;"&gt;KRequestPending&lt;/span&gt;. A check can also be performed (if iCallerStatus is already set leave with KErrInUse exception). After this the asynchronous task is performed. When it is finished the ASP calls User::RequestComplete(iCallerStatus, aResultCode). In this case the AO's RunL eventhandling method is called.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-7735292603137259593?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7735292603137259593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/7735292603137259593'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/asynchronous-service-provider.html' title='Asynchronous service provider'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-2317658330344633872</id><published>2007-05-23T09:51:00.000+01:00</published><updated>2007-05-23T10:12:31.652+01:00</updated><title type='text'>RNotifier can be used for showing dialogs in non GUI apps</title><content type='html'>Symbians Notifier framework is for showing dialogs in non GUI applications (servers/console apps). It provides several buildin dialogs (e.g. Bluetooth device selection) and the option to create custom dialogs (confirmations, info). Some of the Notifier dialogs you should have used without knowing that's the notifier framework behind it (e.g. User::InfoPrint, User::BusyMsg).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-2317658330344633872?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2317658330344633872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/2317658330344633872'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/rnotifier-can-be-used-for-showing.html' title='RNotifier can be used for showing dialogs in non GUI apps'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-538806539066269971</id><published>2007-05-16T10:32:00.000+01:00</published><updated>2007-05-16T10:37:17.487+01:00</updated><title type='text'>Pointers and references</title><content type='html'>A &lt;span style="font-style: italic;"&gt;reference &lt;/span&gt;can be seen as a &lt;span style="font-style: italic;"&gt;dereferenced const pointer&lt;/span&gt; and a &lt;span style="font-style: italic;"&gt;const reference&lt;/span&gt;  is similar to a &lt;span style="font-style: italic;"&gt;dereferenced const pointer to const&lt;/span&gt;. You should use pointers as arguments or return values where you can not use a reference (ownership transfer, pointer arithmetics). In every other case you should prefer a &lt;span style="font-style: italic;"&gt;reference.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-538806539066269971?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/538806539066269971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/538806539066269971'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/pointers-and-references.html' title='Pointers and references'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4801587393194473591.post-3924619103580179677</id><published>2007-05-14T16:52:00.000+01:00</published><updated>2007-05-16T11:00:30.085+01:00</updated><title type='text'>Asynchronous calls</title><content type='html'>When calling an asynchronous function you should never pass arguments from the stack to that function. I can not say exactly if e.g. a TPtrC wrapped around a HBufC* member variable  should be avoided.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4801587393194473591-3924619103580179677?l=makomdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3924619103580179677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4801587393194473591/posts/default/3924619103580179677'/><link rel='alternate' type='text/html' href='http://makomdev.blogspot.com/2007/05/daily-learned-lessons.html' title='Asynchronous calls'/><author><name>makom</name><uri>http://www.blogger.com/profile/06012826659293701737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://home.arcor.de/bazoon/makom.jpg'/></author></entry></feed>
