gpt4 book ai didi

c++ - 我应该删除运算符赋值函数中的原点指针吗?

转载 作者:行者123 更新时间:2023-11-28 02:14:04 26 4
gpt4 key购买 nike

我编写了以下演示代码来学习复制构造函数和赋值运算符。但是有一点困惑。我被告知删除赋值运算符中的指针并为 data 分配新地址。但是我只能让我的代码工作删除该行。我拍了this页面作为引用,但它只显示了 int 的示例,而没有显示 int*。我该如何解决这个问题?

#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <boost/smart_ptr.hpp>
#include <boost/make_shared.hpp>

using namespace boost;

class ClassOne
{
public:
ClassOne():data(NULL) {}
ClassOne(int data_param):data(NULL)
{
init(data_param);
std::cout << "construct" << std::endl;
}

virtual ~ClassOne()
{
if (data) {
delete data;
}
data = NULL;
}

ClassOne(const ClassOne& rhs){
std::cout<< "copy " <<std::endl;
data = NULL;
init(*rhs.data);
}

ClassOne& operator = (const ClassOne& rhs){
std::cout<< "assign " <<std::endl;
int* p_old = rhs.data;
data = new int(*p_old);
//delete p_old; // I have to delete this line to make my code work
return *this;
}

void init(int data_param)
{
if (data) {
delete data;
}
data = new int(data_param);
}

private:
int* data;
};

int main(int argc, const char * argv[]) {
ClassOne c1(10);
ClassOne c2(c1); // call copy constructor
ClassOne c3;
c3 = c1; // call assignment function
return 0;
}

最佳答案

您正试图删除其他对象的 data 成员,而您打算删除自己的 (this) 对象的当前 data 成员反而。您可能想要的是:

ClassOne& operator = (const ClassOne& rhs){
std::cout<< "assign " <<std::endl;
delete data; // delete your own old data
data = new int(*rhs.data); // clone the rhs's data
return *this;
}

关于c++ - 我应该删除运算符赋值函数中的原点指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613399/

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