gpt4 book ai didi

c++ - 将对象指针复制到动态对象数组中

转载 作者:太空宇宙 更新时间:2023-11-04 15:44:20 24 4
gpt4 key购买 nike

我正在使用我创建的类,该类具有函数 addClass,该函数允许用户将类的实例添加到动态分配的数组中。

这是类的代码和一个简单的测试:

Class.h list

#ifndef CLASS_H
#define CLASS_H

#include<iostream>

class Class {
public:
Class(std::string text);
Class(const Class& orig);
virtual ~Class();
Class(std::string text, Class * name, int size);
std::string toString();
void addClass(Class * name, int size = 1);
Class getClass(int index);
private:
Class * classArray;
std::string value;
int size;

};

#endif /* CLASS_H */

Class.c list

#include "Class.h"
#include <cstdlib>


Class::Class(std::string text) {
classArray = NULL;
value = text;
size = 0;
}

Class::Class(const Class& orig) {/*...*/}

Class::~Class() {}

Class::Class(std::string text, Class * name, int size){
value = text;
this->size = size;
if(size == 1)
classArray = name;
else{
int i;
classArray = (Class*)malloc(size*sizeof(Class));
for(i = 0; i < size; i++){
classArray[i] = name[i];
}
}
}

std::string Class::toString(){
return value;
}

void Class::addClass(Class * name, int size){
int i;
Class * tmp = (Class*)malloc((this->size+size)*sizeof(Class));
for(i = 0; i < this->size-1; i++){
tmp[i] = classArray[i];
}
if(size == 1)
tmp[size-1] = name[0];//assignement method is the problem!!!??
else{
for(i = this->size; i < this->size+size-1; i++){
tmp[i] = name[i];
}
}
this->size += size;
free(classArray);
classArray = tmp;
}

Class Class::getClass(int index){
return classArray[index];
}

test.c list

#include<iostream>
#include "Class.h"

using namespace std;

int main(int argc, char** argv) {

Class * objectA = new Class("objectA");
Class * objectB = new Class("objectB");

cout << objectA->toString() << endl;

objectA->addClass(objectB);
//never gets here :'(
cout << objectA->toString() << endl;

return 0;
}

问题是测试永远不会通过 objectA->addClass(objectB) 指令。我尝试调试,发现问题出在 addClass() 方法的赋值指令上。我也试过 memcpy 它没有用。请问有人对此有解决方案吗?谢谢。

最佳答案

不要在 C++ 对象上使用 malloc,使用 new 和 new[] 以及 delete 和 delete[]。 C++ 中 malloc 的问题在于它不会为您的对象调用构造函数,而 free 不会调用析构函数。 new, new[], delete 和 delete[] 做。你会崩溃,因为你正在分配给未构造的对象,而你之所以会崩溃,是因为你没有使用 new。

并不是说这是您的代码的唯一问题,但这是显而易见的问题。

关于c++ - 将对象指针复制到动态对象数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072111/

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