【发布时间】:2019-11-03 10:13:06
【问题描述】:
所以我是一名学生,我有一个关于 C++ 基础的简单作业。到目前为止一切正常,但现在我遇到了一个我似乎无法弄清楚的问题。
我写的类需要在教授提供的main方法中进行测试。问题是,他创建了一个指向对象的指针,然后删除了该指针,但随后又想打印该对象。由于某种原因,这不适用于我编写的代码。
也许我对指针的理解不够,我是通过这个网站学习的: https://www.tutorialspoint.com/cplusplus/cpp_pointers.htm
我认为我的部分问题也在于“添加”方法(你会明白我的意思)。该方法的负责人由教授给出。如果我理解正确,&args 表示它返回地址。
对不起,我的代码是德语的,但这不应该影响你们理解它。 如果我错过了重要的细节或没有写足够详细的问题是什么或我的代码不够详细,也请提前道歉。
非常感谢任何帮助!
我真的不知道如何解决这个问题。
-------------这是教授提供的代码------
我不能编辑这个
int main(){
Class1 Object1List[2];
Class2 Object2.1= Class2(std::string("),...); //all further parameters are strings
Class2* Object2.2= new Class2(std:string(""),...);
Class3 Object3.1 = Class3(std::string(""),...);
Class3* Object3.2 = new Class3 (std::string(""),...);
Object1List[0]=new Class1(Object3.1);
Object1List[0]->Add(Object2.1);
Object1List[0]->Add(*Object2.2);
Object1List[1]=new Class1(Object3.2);
Object1List[1]->Add(Object2.1);
Object1List[1]->Add(*Object2.2);
delete Object2.2;
delete Object3.2;
//for loop to print and afterwards delete both elements in Object1List
}
--------Class1--------------------------------
class Class1 {
static const int maxEntries = 10;
int m_numEntries=0;
Class2 m_Class2;
Class3* m_pList[maxEntries];
public:
Class1(Class2& objClass2);
~Class1();
void Add(Class3& arg);
void Print()const;
}
//cpp
//constructor
this->m_Zeitschrift = zeitschrift;
//deconstructor sets all elements in the list to a nullptr
void Class1::Add(Class2& args){
if(currentNumberOfEntries <=maxNumberOfEntries){
currentNumberOfEntries++;
class3List[currentNumberOfEntries] = &arg;
}
}
//print
void Class1::Print(){
std::cout << "Class2: " << std::endl;
m_Class2.Print();
std::cout << "Class3list: " << std::endl;
for (int i = 0; i < m_numEntries;i++) {
m_pList[i]->Print();
}
}
我希望 print 方法“只是”在列表中写入内容。相反,它告诉我它不能打印,而是这样说(翻译自德语):
抛出的异常:“读取权限(禁止/受伤/受伤/不允许)”(lesezugriffsverletzung) std::_String_alloc >>::_Get_data(...) 返回 0xCDCCDCDE9。
【问题讨论】:
-
我不知道你的老师给你的确切任务,但大多数时候容器会创建存储元素的副本并负责管理它。您只是存储指向元素的指针,因此您的容器永远无法知道该元素是否还活着,它是否可以
delete这个对象等等。 -
@Yksisarvinen 我认为这是一个很好的答案;)
-
@churill 假设太多,无法成为 IMO 的答案。标准容器像这样工作的事实并不意味着用户定义的容器必须这样做。我们需要minimal reproducible example 来正确回答这个问题:)
-
@Yksisarvinen 如果你这么认为 ^^ 确切的任务也会有所帮助。我的意思是描述应该如何实现
Add。 -
@lucieon 虽然在现代 c++ 中不推荐爱上指针 ;)