<
html
>
<
head
>
<
title
>PTypes: string</
title
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=iso-8859-1"
>
<
link
rel
=
"stylesheet"
href
=
"styles.css"
>
</
head
>
<
body
bgcolor
=
"#FFFFFF"
leftmargin
=
"40"
marginwidth
=
"40"
>
<
p
><
a
href
=
"../index.html"
><
img
src
=
"title-21.png"
width
=
"253"
height
=
"39"
alt
=
"C++ Portable Types Library (PTypes) Version 2.1"
border
=
"0"
></
a
>
<
hr
size
=
"1"
noshade>
<
p
class
=
"hpath"
><
a
href
=
"index.html"
>Top</
a
>: <
a
href
=
"basic.html"
>Basic types</
a
>:
string</
p
>
<
ul
>
<
li
>
<
h5
><
a
href
=
"string.constructors.html"
>Constructors/destructors</
a
></
h5
>
</
li
>
<
li
>
<
h5
><
a
href
=
"string.operators.html"
>Operators</
a
></
h5
>
</
li
>
<
li
>
<
h5
><
a
href
=
"string.typecasts.html"
>Typecasts</
a
></
h5
>
</
li
>
<
li
>
<
h5
><
a
href
=
"string.manipulation.html"
>Manipulation</
a
></
h5
>
</
li
>
<
li
>
<
h5
><
a
href
=
"string.conversion.html"
>Conversion</
a
></
h5
>
</
li
>
</
ul
>
<
p
>The <
span
class
=
"lang"
>string</
span
> class implements dynamically allocated
reference-counted 8-bit character strings. The <
span
class
=
"lang"
>string</
span
>
class is a mixture of L-type and null-terminated strings: it has both the length
indicator and the terminating null-symbol. The length of a string is theoretically
limited to <
span
class
=
"lang"
>INT_MAX</
span
>, and practically is limited to the
amount of virtual memory space available to the application. </
p
>
<
p
>A string object itself contains only a reference to the first character of
the string buffer. A string object can be implicitly converted to a null-terminated
string, either a variable or passed as an actual parameter, thus allowing to combine
both PTypes strings and traditional C strings in your application. A string object
converted to <
span
class
=
"lang"
>char*</
span
> or <
span
class
=
"lang"
>const char*</
span
>
never returns <
span
class
=
"lang"
>NULL</
span
> pointers: it guarantees to always
point to some data, even if the string is zero-sized.</
p
>
<
p
>The reference counting mechanism works <
b
>transparently</
b
> (known also as
copy-on-write) and <
b
>safely</
b
> with regard to multithreading. You can manipulate
string objects as if each object had its own copy of string data. Whenever you
modify a string object the library safely detaches the buffer from all other string
objects that may be using the same buffer and creates a unique copy so that changes
won't affect the other "holders" of this string.</
p
>
<
p
><
b
>NOTE on multithreading</
b
>: the dynamic string objects themselves are NOT
thread-safe. In other words, each thread can manipulate objects (variables) of
type <
span
class
=
"lang"
>string</
span
> only within their scope. However, it is
safe to pass strings as (copy) parameters when, for example, sending a message
to a concurrent thread through a message queue. Whenever the recipient thread
tries to modify the string, the shared data buffer is safely detached.</
p
>
<
p
>The string class is declared in <
a
href
=
"include/ptypes.h.html"
><
ptypes.h
></
a
>.</
p
>
<
p
class
=
"seealso"
>See also: <
a
href
=
"string.constructors.html"
>Constructors/destructors</
a
>,
<
a
href
=
"string.operators.html"
>Operators</
a
>, <
a
href
=
"string.typecasts.html"
>Typecasts</
a
>,
<
a
href
=
"string.manipulation.html"
>Manipulation</
a
>, <
a
href
=
"string.conversion.html"
>Conversion</
a
></
p
>
<
hr
size
=
"1"
>
<
a
href
=
"../index.html"
class
=
"ns"
>PTypes home</
a
>
</
body
>
</
html
>