Я читал Основные принципы 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 байтов гарантированно будут потрачены впустую?И как можно исправить (кроме объявления конструктора, который является источником отходов примера)