C++ 未调用赋值运算符 #包括 类内存块{ 私人: 整数长度=0; int*m_arr=nullptr; 公众: //建造师 显式内存块(int p_length):长度(p_length),m_arr(new int[length]){ std::cout
C++ 未调用赋值运算符 #包括 类内存块{ 私人: 整数长度=0; int*m_arr=nullptr; 公众: //建造师 显式内存块(int p_length):长度(p_length),m_arr(new int[length]){ std::cout,c++,C++,MemoryBlock mb3=mb1+mb2;调用复制构造函数 MemoryBlock mb3;mb3=mb1+mb2;调用赋值运算符。MemoryBlock mb3=mb1+mb2;调用复制构造函数。为什么?如何修复它?因为它是对象的副本初始化。通过调整复制构造函数来修复它(无论什么)。“赋值”如果赋值运算符采用MemoryBlock而不是MemoryBlock&,则将在调用加号运算符之后和调用赋值运算符之前调用复制构造函数。 In MemoryBlock(int), length is 1
MemoryBlock mb3=mb1+mb2;
调用复制构造函数
MemoryBlock mb3;mb3=mb1+mb2;
调用赋值运算符。MemoryBlock mb3=mb1+mb2;
调用复制构造函数。为什么?如何修复它?因为它是对象的副本初始化。通过调整复制构造函数来修复它(无论什么)。“赋值”如果赋值运算符采用MemoryBlock
而不是MemoryBlock&
,则将在调用加号运算符之后和调用赋值运算符之前调用复制构造函数。
In MemoryBlock(int), length is 11.
In MemoryBlock(const MemoryBlock&), length is 11.
In operator+(const MemoryBlock&), adds length and array space. New length: 22
In MemoryBlock(int), length is 22. // Maybe temporary object?
----------------- End of main() -----------------
~MemoryBlock() is called. Deleting resources.
~MemoryBlock() is called. Deleting resources.
~MemoryBlock() is called. Deleting resources.