Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost Pointer Container Library

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost Pointer Container Library

FAQ

Which mutating algorithms are safe to use with pointers?

Любой мутирующий алгоритм, который перемещает элементы, меняя их. Важным примером являетсяstd::sort(); примерами небезопасных алгоритмов являютсяstd::unique()иstd::remove()..

Why does ptr_map<T>::insert()/replace() take two arguments (the key and the pointer) instead of one std::pair? And why is the key passed by non-const reference?

Это единственный способ, которым функция может быть реализована без исключений; поскольку копи-конструктор ключа может бросать, и поскольку аргументы функции не гарантированно оцениваются слева направо, мы должны убедиться, что оценка первого аргумента не бросает. Передача ключа в качестве ссылки достигает именно этого.

When instantiating a pointer container with a type T, is T then allowed to be incomplete at that point?

Нет. Это свойствоshared_ptr, которое подразумевает некоторые накладные расходы.

Однако в файле заголовка можно оставитьTнеполным:

// foo.hpp
class Foo { ... };
new_clone( const Foo& ) { ... }
delete_clone( const Foo* )     { ... }
// x.hpp
class Foo; // Foo is incomplete here
class X { ptr_deque<Foo> container; ... }
// x.cpp
#include <x.hpp>
#include <foo.hpp> // now Foo is not incomplete anymore
...

Why do iterator-range inserts give the strong exception-safety guarantee?

Разве это не очень неэффективно? Это связано с тем, что это действительно доступно; накладные расходы составляют одну кучу, которая относительно невелика по сравнению с клонированием N-объектов.

What is the polymorphic class problem?

Проблема относится к относительно сложному способу поддержки C++. Объектно-ориентированное программирование в связи с контейнерами указателей на полиморфные объекты. На языке без сбора мусора вы в конечном итоге используете либо контейнер с умными указателями, либо контейнер, который принимает на себя ответственность за указатели. Самое сложное — найти безопасное, быстрое и элегантное решение.

Are the pointer containers faster and do they have a better memory footprint than a container of smart pointers?

Короткий ответ: да, они быстрее и используют меньше памяти; на самом деле, они являются единственным способом получить нулевую отметку C++. Умные указатели обычно имеют одно слово или более накладных расходов памяти на указатель, потому что количество ссылок должно поддерживаться. И поскольку количество ссылок должно поддерживаться, есть также время выполнения. Если ваши объекты большие, то накладные расходы на память часто незначительны, но если у вас много маленьких объектов, это не так. Более подробную информацию можно найти в этих ссылках:и.

When the stored pointers cannot be 0, how do I allow this "empty" behavior anyway?

Хранение нулевого указателя в списке указателей не вписывается в объектно-ориентированную парадигму. Наиболее элегантным дизайном является использование шаблона Null-Object, где в основном создается конкретный класс с фиктивными реализациями виртуальных функций.Подробности.


Copyright:Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).

Статья Boost Pointer Container Library раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 22:54:09/0.026293992996216/1