Имеется код с простым классом:
class SimpleClass{
public:
SimpleClass()
{
std::cout << "Simple class constructor has been called" << std::endl;
};
SimpleClass(SimpleClass const & simpleClass)
{
std::cout << "Simple class copy constructor has been called" << std::endl;
this->data = simpleClass.data;
}
SimpleClass & operator=(SimpleClass const & simpleClass );
void printData();
void * data;
char * name = "name";
~SimpleClass()
{
delete data;
}
};
SimpleClass &SimpleClass::operator=(SimpleClass const & simpleClass) {
std::cout << "equation operator has been called" << std::endl;
this->data = simpleClass.data;
return *this;
}
void SimpleClass::printData() {
std::cout << reinterpret_cast<char*>(data) << std::endl;
}
SimpleClass getInstanceOfSimpleClass()
{
SimpleClass simpleClass;
char * data = new char;
data = "data";
simpleClass.data = reinterpret_cast<void*>(data);
simpleClass.name = "instance from function";
return simpleClass;
}
int main() {
SimpleClass simpleClassInstance(getInstanceOfSimpleClass());
simpleClassInstance.printData();
return 0;
}
И, что очень странно, у меня следующий вывод после компиляции этого кода (и запуска того, что получилось):
Simple class constructor has been called
data
Напрашивается 2 вопроса:
1) Почему не вызывается конструктор копирования?
SimpleClass(SimpleClass const & simpleClass)
{
std::cout << "Simple class copy constructor has been called" << std::endl;
this->data = simpleClass.data;
}
2) Как так получается, что конструктор копирования не вызывается, а данные, которые содержались в объекте, который вернула функция getInstanceOfSimpleClass, записались в только что созданный объект?
MinGW G++ 8.2.0