Вот мой код:запускается копия, но как?
#include <iostream>
#include <cstring>
using namespace std;
class someClass{
char * data;
public:
someClass(const char * s){
data = new char[strlen(s)+1];
strcpy(data,s);
cout << "constructing.."<<endl;
}
someClass(const someClass &o){
data = new char[strlen(o.data)];
strcpy(data,o.data);
cout << "copy construction" << endl;
}
~someClass(){delete [] data; cout << "destructing..." << endl;}
char * getValue(){return data;}
};
void showValue(someClass o){
char * s;
s = o.getValue();
cout << s << endl;
}
int main(int argc, char ** argv){
someClass str("Hello"), ptr("world");
showValue(str);
showValue(ptr);
}
и выход:
constructing..
constructing..
copy construction
Hello
destructing...
copy construction
world
destructing...
destructing...
destructing...
Теперь первые два 'построения ..' срабатывают, как только мы создаем объект в основной() в строке 1.
showValue (str) запускается и запускает конструктор копирования для слова «привет». Как? После создания и временного объекта он разрушает себя, когда он не работает.
showValue (ptr) запускается и запускает конструктор копирования для слова «мир». Как? После создания и временного объекта он разрушает себя, когда он не работает.
И наконец, в обратном порядке наши объекты str и ptr уничтожаются.
Зачем копировать ctor? Я не отправил объект someClass в объект someClass. Можете ли вы объяснить мне ситуацию?
Tangential, но стоит прочитать, если вы создаете конструкторы копирования: [Что такое правило трех?] (Http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) – user4581301