Представление значений нетривиально копируемых типов

Я заинтригован следующим абзацем из стандарта (§3.9 / 4 ISO / IEC 14882: 2011 (E)):

представление объекта объекта типа T последовательность N unsigned char объекты, захваченные объектом типа T, где N равняется sizeof(T), представление значения объекта представляет собой набор битов, которые содержат значение типа T, Для тривиально копируемых типов представление значения представляет собой набор битов в представлении объекта, который определяет значение, который является одним дискретным элементом определенного реализацией набора значений.42

Я понимаю что представление объекта а также представление значения различаются, чтобы позволить некоторому представлению объекта не принимать участие в значении объекта (например, заполнение). Я не совсем понимаю о тривиально копируемых типах. Разве нетривиально копируемые типы не имеют значений? Может ли часть представления значения нетривиально копируемого типа существовать вне его представления объекта?

Примечание 42 объясняет:

Предполагается, что модель памяти C ++ совместима с языком программирования ISO / IEC 9899 C.

Я до сих пор не понимаю, почему предыдущее утверждение специально предназначено только для тривиально копируемых типов. Каково значение этого?

3

Решение

Стандартный пример — это класс, который управляет ресурсом:

struct Foo
{
Bar * p;

Foo() : p(new Bar) { }
~Foo() { delete p; }

// copy, assign
};

Объект типа Foo имеет значение, но это значение не может быть скопировано путем копирования представления объекта (которое является просто значением p в этом случае). Копирование объекта типа Foo требует копирования семантика класса, которые говорят «объект владеет pointee «. Подходящая копия, таким образом, требует соответствующего, определенного пользователем конструктора копии:

Foo::Foo(Foo const & rhs) : p(new Bar(*rhs.p)) { }

Теперь объектное представление объекта типа Foo отличается от представления объекта копии такого объекта, хотя они имеют одинаковое значение.

Напротив, значение int такой же, как у другого int как только представления объектов совпадают. (Это достаточное, хотя и не обязательное условие из-за заполнения.)

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]