Advertisement

C++ copy constructor

阅读量:

对象赋值中的指针变量成员

逐位复制(bitwise copy) :
众所周知,将一个对象实例分配给具有相同类型的对象(例如 MyClass a=MyClass b),在这一过程中,编译器会自动生成相应的代码,将“源”对象中各个属性的值逐一传递至“目标”对象的对应成员位置,这种操作方式被称作逐位复制(bitwise copy)

逐位复制下的普通变量与指针变量 :
在大多数情况下,逐位赋值不会引发任何问题。然而,当某些成员变量为指针类型时,情况便有所不同:当对象成员进行逐位复制后,将会产生两个完全相同的实例。这两个实例中的普通变量虽然名称一致,但各自存储的位置却并不相同。而对于这两个副本实例中同名的指针变量而言,它们所指向的地址却是完全一致的……

漏洞:
若两个实例中的同名指针变量指向了相同的内存地址,则当其中一个对象被销毁时,其所包含的指针资源也将被释放。然而如果另一个副本(对象)仍然在引用该指针,则很可能会引发异常问题!


例如:

构建一个名为 Myclass 的类,在该类中包含一个普通成员变量 test 以及一个指针类型的成员变量 testp:

复制代码
    class Myclass
    {
    public:
    	int test; //普通成员变量test

全部评论 (0)

还没有任何评论哟~