见代码:
#include <iostream>
using
namespace std;
class
A
{
public
:
A
(
)
{
cout
<
<
"call A construct"
<
<
endl;
}
~A
(
)
{
cout
<
<
"call A destroy"
<
<
endl;
}
private
:
int a;
}
;
class
B
{
public
:
B
(
)
{
cout
<
<
"call B construct"
<
<
endl;
}
~B
(
)
{
cout
<
<
"call B destroy"
<
<
endl;
}
private
:
int b;
}
;
int
main
(
)
{
A
*
pa
=
new
A;
B
*
pb
=
(
B
*
)
new
(
pa
)
B
;
pb
-
>
~B
(
)
;
delete
pa;
pa
=
NULL;
pb
=
NULL;
return
0
;
}
这时我想两个对象共享一块内存则也共享内存中的内容。
所以将上述代码更改下来验证:
#include <iostream>
using
namespace std;
class
A
{
public
:
A
(
)
{
cout
<
<
"call A construct"
<
<
endl;
}
~A
(
)
{
cout
<
<
"call A destroy"
<
<
endl;
}
void
print
(
)
{
cout
<
<
a
<
<
endl;
}
private
:
int a;
}
;
class
B
{
public
:
B
(
int val
)
:
b
(
val
)
{
cout
<
<
"call B construct"
<
<
endl;
}
~B
(
)
{
cout
<
<
"call B destroy"
<
<
endl;
}
void
print
(
)
{
cout
<
<
b
<
<
endl;
}
private
:
int b;
}
;
int
main
(
)
{
A
*
pa
=
new
A;
B
*
pb
=
(
B
*
)
new
(
pa
)
B
(
3
)
;
pb
-
>
print
(
)
;
pb
-
>
print
(
)
;
pb
-
>
~B
(
)
;
delete
pa;
pa
=
NULL;
pb
=
NULL;
return
0
;
}
可以发现A类对象中的a值和B类对象的b值是一样的,因为它们是共享同一块内存。这块内存既委托给了pa所指向的那个A类的对象也委托给了pb所指向的那个B类对象,也就是说这两个对象都可以操作这块内存中的内容。所以对*pa 对象的操作会影响到*pb 对象,对 *pb 对象的操作会影响到*pa 对象。