Потерянное пространство в макете в Основных принципах CPP - PullRequest
0 голосов
/ 31 января 2019

Я читал Основные принципы CPP , С.9: Не тратьте время или пространство :

Пример, плохо:

struct X {
    char ch;
    int i;
    string s;
    char ch2;

    X& operator=(const X& a);
    X(const X&);
};

X waste(const char* p)
{
    if (!p) throw Nullptr_error{};
    int n = strlen(p);
    auto buf = new char[n];
    if (!buf) throw Allocation_error{};
    for (int i = 0; i < n; ++i) buf[i] = p[i];
    // ... manipulate buffer ...
    X x;
    x.ch = 'a';
    x.s = string(n);    // give x.s space for *p
    for (gsl::index i = 0; i < x.s.size(); ++i) x.s[i] = buf[i];  // copy buf into x.s
    delete[] buf;
    return x;
}

void driver()
{
    X x = waste("Typical argument");
    // ...
}

Затем говорится:

... Обратите внимание, что компоновка X гарантирует, что по крайней мере 6 байтов (и, скорее всего, больше)впустую.

Почему 6 байтов гарантированно будут потрачены впустую?И как можно исправить (кроме объявления конструктора, который является источником отходов примера)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...