遵循 c++ 11 标准,我认为只要完成两个对象之间的分配,g++ 就会隐式地使用成员方式的副本。令人惊讶的是,我注意到与标准相反,g++ 似乎调用了一个大小为对象实际大小的 memcpy。下面是我的意思的一个片段。
#include <stdio.h>
class Classe {
public:
Classe(char m1 = 0, int m2 = 0) : membro1(m1), membro2(m2) {};
void setMembro1(char m1) {membro1 = m1;}
void setMembro2(int m2) {membro2 = m2;}
char getMembro1() const {return membro1;}
int getMembro2() const {return membro2;}
private:
char membro1;
int membro2;
};
Classe c;
void function() {
c = Classe('a', 1);
}
int main() {
char ciao[] = "HELLO!";
printf("Ciao\n");
function();
printf("%d\n", sizeof(Classe));
}
在执行结束时,我希望“c”对象所在的内存是 {0x61, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00},但显然,在第一个位置(包含 0x61 ),实际上复制了一些“函数”函数数据的堆栈,这是不正确的,恕我直言。
你知道发生了什么吗?非常感谢您的努力。