C++0x move semantics?
От: crontab  
Дата: 10.09.07 21:09
Оценка: +1
В Си++ есть такая проблема: при конструировани динамических типов (строки, вектора) может производиться динамический alloc и копирование данных. Например:

string s = "abc";

когда как в некоторых других языках, где, скажем, динамическая строка встроена в язык, копирование не производится. Я как-то давно копался в Delphi, к примеру, и обнаружил, что компилятор сам создает для строки "abc" в константном сегменте такую структуру, которая совместима со строками в динамической памяти, и поэтому во время инициализации копируется только указатель. У таких константных строк reference counter всегда -1, что защищает их от высвобождения. Ясно, что такое возможно (полагаю) только при поддержке со стороны компилятора.

На одном англоязычном форуме я отметил что это есть фундаментальная проблема в С++, и что она не может быть решена в страуструповском духе. А следовательно не будет решена никогда, и в итоге С++ будет уступать другим языкам в плане производительности. На что мне ответили, что в C++0x якобы проблема решена:
http://en.wikipedia.org/wiki/C++0x#Rvalue_Reference.2FMove_semantics

и все разошлись довольные. А я так и не понял как эти мув-конструкторы помогают избежать копирования, например, простого строкого литерала, когда он присваивается классу string.

Что думаете по этому поводу?
--
crontab
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.