如何复制动态分配的对象具有类的一个 const 成员

问题描述

我正在尝试创建一个函数用户可以在其中添加数据条目,因此数组动态地将其大小增加 1 并允许用户输入数据。

逻辑:

  1. 通过引用函数传递当前大小和数组指针
  2. 函数中创建一个新的指针数组(动态分配),并将其大小增加 1 。
  3. 将传入数组中的所有数据复制到新创建的数组中
  4. 删除分配给参数指针的内存
  5. 将参数指针指向新的指针数组。

问题:我在类中有一个 const int 成员,按照上面的算法,当我尝试将内容复制到新指针时,很明显 id 不会被复制到 const 成员。 我有一种预感,我可以在这里使用带有初始化列表的复制构造函数,并在复制构造函数的帮助下初始化函数的新数组。

我需要知道如何使用复制构造函数复制动态分配的对象数组,而且,如果对象有一些 const 成员。

提前致谢。

班长:

#include <iostream>
#include <stdlib.h>
using namespace std;

class ramish
{
private:
    const int id;
public:
    void print()
    {
        cout << "ID = " << id;
    }
    ramish():id(rand()%100+1)
    {
    }
    //ramish(ramish *& object)
    //{
    //}
};

功能和驱动程序:

int main()
{
   int size = 4;
   ramish* object = new ramish[size];
   copypointer(object,size);
}

void copypointer(ramish*& object,int size)
{
   ramish *newobject = new ramish[size + 1];
   for (int i = 0; i < size; i++)
   {
       newobject[i]=object[i];//going to give error here due to const member
   }
   delete[]object;
   //take inps from user for newobject[size]
   object = newobject;
   newobject = NULL;
}

解决方法

我可以在这里使用带有初始化列表的复制构造函数

是的,你可以:

class ramish
{
private:
    const int id;
public:
    void print()
    {
        cout << "ID = " << id << "\n";
    }
    ramish():id(rand()%100+1)
    {
    }
    ramish(const ramish& other) : id(other.id)
    {
    }
};

int main() {
    ramish a;
    ramish b = a;
    a.print();
    b.print();
}

Output

ID = 84
ID = 84

尽管您应该考虑从成员中删除 const。你为什么让它const?以至于无法修改。但它是私有的,即使它不是 const,也无法从类外部修改它。然后就可以依赖编译器生成的拷贝构造函数(example)。