дублируется в стеке для передачи в функцию. Это может быть очень дорого, если ваш класс достиг определенного количества байтов, поскольку каждая переменная экземпляра должна быть размещена в стеке. В этом случае класс не ведет себя иначе, чем обычная структура c.
Допустим, у вас 2 класса в классе (я полагаю, 32-битная система)
class A {
int a;
int b;
};
когда вы объявляете это в вашем main, указатель стека уменьшается на 8 байтов.
если вы вызываете your_function (A), C должен также скопировать класс макета в стек, чтобы ваша_функция могла получить к нему доступ после вызова. это означает, что указатель стека снова уменьшается на 8 байтов, значение записывается из старых значений и вызывается функция.
с двумя переменными экземпляра, это не имеет большого значения. Но у вас есть класс, который содержит структуры и допустим 20 дюймов + виртуальный стол? чем я могу быть очень дорогой операцией. Если вы передадите указатель, указатель стека должен уменьшиться всего на 4 байта, скопировать в него адрес класса и вызвать функцию. намного дешевле, конечно.
Вы можете попробовать это самостоятельно. Просто измените некоторую переменную экземпляра в функции и затем проверьте после того, как функция вернулась, имеет ли ваш первый класс новое значение или значение до вызова функции. Это должно дать вам ответ.
В любом случае, если это именно то, что вам нужно, вы должны реализовать конструктор копирования, чтобы управлять тем, как копировать ваши переменные.