gpt4 book ai didi

c++ - 如何从运算符函数返回动态对象?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:54 25 4
gpt4 key购买 nike

我正在为 - 编写一个运算符函数,其中我的类对象是一个动态整数数组。运算符获取 lhs 和 rhs 对象并返回一个对象,该对象是 lhs 中但不在 rhs 中的元素集。

虽然我已经编写了函数,但我无法返回集合,因为在返回对象后立即调用了析构函数。

IntegerSet & IntegerSet::operator - (IntegerSet & rhs) const
{
IntegerSet temp(capacity);//local object created to store the elements same size as lhs

int k=0;
int lhssize = ElementSize();//no. of elements in the set
int rhssize = rhs.ElementSize();

for (int i=0;i<lhssize;i++)
{
for (int j=0;j<rhssize;j++)
{
if (rhs.ptr[j]!=ptr[i])
{
k++;
}
}

if(k==rhssize)
{
temp = temp + ptr[i];
}
k=0;
}
return temp;
}

如果你不理解这个对象,这里是构造函数

IntegerSet::IntegerSet(const int & size)//works correctly
{
capacity = size;
ptr = new int [capacity]();
}

IntegerSet::IntegerSet(const int & size)//works correctly
{
capacity = size;
ptr = new int [capacity]();

}

IntegerSet::IntegerSet(const IntegerSet & copy) : capacity(copy.capacity)//works correctly
{

ptr = copy.clonemaker();
}

IntegerSet::~IntegerSet()
{
capacity = 0;
delete [] ptr;
}


int * IntegerSet::clonemaker() const // works correctly
{
if(ptr==NULL)
{
return NULL;
}

int *tempptr = new int [capacity];
for(int i=0;i<capacity;i++)
{
tempptr[i]=ptr[i];
}

return tempptr;

}

最佳答案

您必须按值返回。当函数返回时,局部对象将被销毁,并且没有办法阻止这种情况。

为此,您的类(class)必须正确遵循 Rule of Three以确保它可以正确复制。在 C++11 或更高版本中,您还可以考虑使其可移动,以避免不必要的内存分配和复制(尽管在这种情况下,无论如何都应该省略复制)。

更好的是,遵循零规则并存储 vector<int> ,它将为您完成所有这些工作,而不是尝试处理原始指针。

关于c++ - 如何从运算符函数返回动态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com