Для небольшого прошлого я изучал c ++ в течение 3 месяцев, поэтому я в основном новичок, и я пытаюсь понять классы, которые содержат необработанные указатели в качестве элементов данных, и как использовать копирующих подрядчиков и перемещать семантику с ними.
Итак, у меня есть этот простой класс, который содержит простой конструктор / деструктор и нереализованный конструктор копирования.
Все, что я делаю, - это создание объекта с использованием указанного класса, а затем вызов членафункция с ним.
Итак, мой вопрос:
Могу ли я как-то всегда гарантировать, что при вызове функции-члена я сделаю копию объекта, вызывающего ее, а не передам ее по ссылке?
Вы можете легко передать что-либо по ссылке, если добавите оператор "&", но как насчет передачи чего-либо по значению?Я прочитал, что передача по значению является способом по умолчанию для компилятора, но по какой-то причине, когда я выполняю свой код, конструктор копирования не вызывается.
using namespace std;
class dog {
public:
string* name;
int* age;
dog(string NameVal = { "Null" }, int AgeVal = { 10 }) {
name = new string{ NameVal };
age = new int{ AgeVal };
cout << "constructor for " << *name << endl;
}
~dog() {
cout << "destructor for " << *name << " " << age << endl;
}
dog(const dog &source) {
cout << "copy constructor for " << *name << endl;
}
void talk(string text) {
cout << text << *name << endl;
}
};
int main() {
dog test;
test.talk("Test_Text ");
return 0;
}
Поэтому я ожидал, что конструктор копирования будет вызван длятестовый объект, но, похоже, он передается по ссылке с помощью указателя «this».
Как я могу изменить это и фактически сделать копию объекта при вызове функции?
Спасибоза любую помощь.