LINUX.ORG.RU

Что мешало реализовать семантику переноса еще в Си++ 03

 , ,


1

3

Собственно, сабж.

Кто в курсе подскажите, какие были причины такой долгой привязанности к избыточному копированию в куче?

Что мешало запилить эту фишку еще в 2003?

★★★★★

Последнее исправление: Twissel (всего исправлений: 1)

Что мешало запилить эту фишку еще в 2003?

auto_ptr, по сути, реализовывал именно перемещение. Только делал это при «копировании», потому и ломал логику, если применялся неаккуратно.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r
#include <iostream>
#include <memory>
using namespace std;
 
int main(int argc, char **argv)
{
    int *i = new int;
    auto_ptr<int> x(i);
    auto_ptr<int> y;
 
    y = x;
 
    cout << x.get() << endl; // Print NULL
    cout << y.get() << endl; // Print non-NULL address i
 
    return 0;

Вроде этого примера из Вики, да?

P.S. Хотя цитата из той же Википедии:

Because of its copy semantics, auto_ptr may not be used in STL containers that may perform element copies in their operations.

Twissel ★★★★★
() автор топика
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от DarkEld3r

auto_ptr, по сути, реализовывал именно перемещение.

Перемещение прав владения ресурсом. Поверх этого можно нагородить своих костылей, но к move-semantics из C++11\14 это будет иметь крайне опосредованное отношение.

cyanide_regime
()
Ответ на: комментарий от Twissel

А, ну таки, потому-что destructive copy же!

Twissel ★★★★★
() автор топика
Ответ на: комментарий от DELIRIUM

Сознание он ломал у неокрепших умов.

Ну справедливости ради у него много ограничений, которых «нормальное перемещение» лишено. Хотя бы, возможность хранения в контейнерах. Слишком легко, даже для С++, выстрелить в ногу.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от cyanide_regime

но к move-semantics из C++11\14 это будет иметь крайне опосредованное отношение.

Принцип-то такой же. И реализация копирующего конструктора у auto_ptr и текущих move-конструкторов одинаковая. Понятое дело, что без нормальной поддержки оно намного менее удобное.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.