#c #class #struct #copy-constructor
#c #class #struct #copy-constructor
Вопрос:
Предположим, вы создаете класс
class X {
private:
int x;
myStruct foo; // myStruct is a struct
public:
X(); // Constructor
X(int, myStruct); // Parameterized Constructor
X(const Xamp; other); // Copy Constructor
void example(const Xamp; a); // Function that passes class X by const reference
void example2(X a); // Function that passes class X by value
};
Как обрабатывается элемент данных структуры, когда объект передается по ссылке? Например, при example(const Xamp; a)
вызове вызывается ли здесь конструктор копирования структуры? Как обрабатывается элемент данных структуры? Если вы вызвали example2(X a);
, создается ли новая структура вместе с классом a?
Комментарии:
1. Кстати, глядя на ваш вопрос, кажется, вы можете думать, что
class
иstruct
разные вещи. Это совсем не так, единственное отличие — спецификаторы доступа по умолчанию для членов.2. Я отредактировал вопрос, чтобы он был более понятным. Другие вопросы не отвечают на суть моего вопроса
3. Да, я это понимаю. Я сделал различия, потому что структуры обычно не имеют методов. Я также немного обновил вопрос @cigien
4. Хорошо, я снова открылся. Могу я спросить, почему вы думаете, что использование ссылки на объект приведет к созданию копий его членов?
5. Спасибо. Я не обязательно так думаю. Насколько я понимаю, когда объект передается без ссылки const, например, example2(X a), создается новый экземпляр типа X, и любой объект, который вы передали в него, копируется, что может быть дорогостоящим. Наличие параметров в качестве ссылки const решает эту проблему. Но если вы передаете объект с помощью const ref , например, example(const Xamp; a) , является ли конструктор копирования для вложенного класса / структуры, в приведенном мной примере вызывается конструктор копирования MyStruct? Мое замешательство заключается в том, как обрабатывается вложенный класс при его передаче. Еще раз спасибо @cigien