Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.


Channels ▼
RSS

Space Efficient Sets and Maps


Deferred Value Destruction for erase

Deferred Value Destruction for erase

All of the standard collection erase functions actually perform two functions:

1. Remove the element from the collection.

2. Destroy the value contained by that element.

In all cases, the destroy is immediate: when erase returns, the value's destructor has been called. However, the design of CompactSet deviates from this convention: the value destruction may be deferred until some point after erase has returned. In fact, if the erased value is part of archiveSet, it must not be destroyed until a compaction occurs.

The reason for this is that the erased value must hold its position in the sorted vector so that future binary searches on the vector are valid. If the value were destroyed prematurely, the binary search might access the destroyed element while searching for another value. The value must remain valid until its destructor is called (some time later, during compaction).

This condition is satisfied for all pure value types (including all primitive types, std::strings, and the standard collections, provided the value type of the collection is a pure value). Any class that destroys all of its state in its destructor will work with deferred destruction.

Classes that do not manage their own resources may not be compatible with CompactSet. In particular, any design that destroys or alters the contents of the value immediately after it has been erased will not work with CompactSet.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.