一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。
但是在C++中可以(无需重载=运算符),需要区分以下3种情况:
#include<iostream>
#include<string>
using namespace std;
struct A
{
char a[10];
};
struct B
{
char *b;
};
struct C
{
string c;
};
A a1;
strcpy(a1.a, "aaa");
A a2;
a2 = a1; //深拷贝without defining the = operator
LOGE("%s, %s , %p , %p\n", a1.a, a2.a, a1.a, a2.a);
LOGE("\n-----------------------------------------\n");
B b1;
b1.b = new char[10];
strcpy(b1.b, "bbb");
B b2 = b1;//浅拷贝
LOGE("%s, %s , %p , %p\n", b1.b, b2.b, b1.b, b2.b);
LOGE("\n-----------------------------------------\n");
C c1;
c1.c = string("ccc");
C c2 = c1;//深拷贝
LOGE("%s, %s , %p , %p\n", c1.c.c_str(), c2.c.c_str(), c1.c.c_str(), c2.c.c_str());
/*
aaa, aaa , 0xbe8be2e8 , 0xbe8be2dc
-----------------------------------------
bbb, bbb , 0x985b98b0 , 0x985b98b0
-----------------------------------------
ccc, ccc , 0x985b98cc , 0x985b98cc
*/
---------------------
作者:AncientCastle
来源:CSDN
原文:https://blog.csdn.net/hq354974212/article/details/78632228
版权声明:本文为博主原创文章,转载请附上博文链接!