Week 23 contribution of SDK documentation content. See release notes for details. Fixes bugs Bug 2714, Bug 462.
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
<!-- This component and the accompanying materials are made available under the terms of the License
"Eclipse Public License v1.0" which accompanies this distribution,
and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<!-- Initial Contributors:
Nokia Corporation - initial contribution.
Contributors:
-->
<!DOCTYPE concept
PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="GUID-82B73D69-0176-5CBB-B3ED-5CA7F5CCD5D9" xml:lang="en"><title>The
relationship between descriptor classes</title><shortdesc>Describes inheritance relationship between the descriptor classes
and associated abstract base classes.</shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody>
<p>The following diagram shows the inheritance relationship between the concrete
descriptor classes and their abstract base classes. </p>
<p>The diagram uses the 16-bit variant types: </p>
<ul>
<li id="GUID-9F68E03E-EC88-50FD-868C-EB3C91DE9F50"><p> <xref href="GUID-8FE95467-D48B-3E61-9028-29C0F15F567E.dita"><apiname>TPtrC16</apiname></xref> </p> </li>
<li id="GUID-DC40BC35-AA45-515C-9721-8B6E73A7AC89"><p> <xref href="GUID-262C5A94-F186-31A1-855E-1FE123BC101C.dita"><apiname>TPtr16</apiname></xref> </p> </li>
<li id="GUID-10AD9787-4CCA-5600-8898-1F18B94C6499"><p> <xref href="GUID-44622E86-313E-36B3-9989-3016F8E6E252.dita"><apiname>TBufC16</apiname></xref> <codeph><TInt></codeph> </p> </li>
<li id="GUID-D88E7A38-CF2F-5723-B1C1-C9FF3113AEF9"><p> <xref href="GUID-EF25E407-26DF-3D97-B725-2DD0345975BA.dita"><apiname>TBuf16</apiname></xref> <codeph><TInt></codeph> </p> </li>
<li id="GUID-55E8280B-DB84-51B0-B103-E674DACCE388"><p> <xref href="GUID-BFBC574B-EFF6-37A4-9189-B71DA1505BC8.dita"><apiname>RBuf</apiname></xref> </p> </li>
<li id="GUID-9B7A4836-E7BA-5751-AFA7-563ED80B2F76"><p> <xref href="GUID-3D3D9CD7-C8FD-3F81-9CC5-1A71D4F9751E.dita"><apiname>HBufC16</apiname></xref> </p> </li>
</ul>
<p>but the relationship is exactly the same for the 8-bit variants. The class
names can also be replaced by the build independent types and the relationships
remains valid. </p>
<p>The <codeph>TBufBase16</codeph> and <codeph>TBufCBase16</codeph> classes
are an implementation convenience and are not part of the public API. </p>
<p> <xref href="GUID-440FF2B4-353B-3097-A2BA-5887D10B8B23.dita"><apiname>TDesC16</apiname></xref> and <xref href="GUID-C04A9A0C-DBA7-37DA-B744-54FBF3D544CD.dita"><apiname>TDes16</apiname></xref> are abstract
classes and cannot be instantiated, However, these types can be passed as
arguments to functions. </p>
<fig id="GUID-B76A3D70-207B-55B2-B5BC-003E6E143375">
<image href="GUID-4BCE7915-6BF9-5D83-9049-B7FA9725B406_d0e221356_href.png" placement="inline"/>
<p>Inheritance relationship between the concrete descriptor classes and their
abstract base classes</p>
</fig>
<p>Because descriptors are widely used (especially on the stack), the size
of descriptor objects must be kept to a minimum. To help with this, no virtual
functions are defined in order to avoid the overhead of a virtual function
table pointer in each descriptor object. </p>
<p>As a consequence, the base classes have implicit knowledge of the classes
derived from them. </p>
</conbody></concept>