展开新对象并将其添加到函数内的数组中
Expand and add a new object to a array inside a function
我正在尝试扩展并向函数内的数组添加新对象,并使该数组也受到函数外部的影响(数组指针作为参数发送)。
void addMedia(Media* medias[], int &nrOfMedias, string title, int publYear, string author, int nrOfPages)
{
Media** tempArray = new Media*[nrOfMedias +1];
for(int i = 0; i < nrOfMedias; i++)
{
tempArray[i] = medias[i];
}
delete [] medias;
medias = tempArray;
delete [] tempArray;
medias[nrOfMedias] = new Book(title, publYear, author, nrOfPages);
nrOfMedias++;
}
这段代码在函数内部运行良好,但是当我在函数外部时,数组仍然是空的。据我了解,这是因为指针在函数内部发生了变化,但是如何在不更改指针的情况下扩展数组?
(我不能更改返回数据类型或参数,赋值要求。
将medias = tempArray;
更改为*medias = tempArray;
,使其编译,完善您的内存管理(考虑一下,真正应该释放什么,什么不应该)。
不要将媒体视为指针数组,而应将其视为指向数组的指针。工作示例(略微简化):
class Media
{
public:
Media () { m_strTitle = "unknown";}
string m_strTitle;
};
class Book : public Media
{
public:
Book(string strTitle) { m_strTitle = strTitle; }
};
void addMedia(Media* medias[], int &nrOfMedias)
{
Media * tempArray = new Media[nrOfMedias +1];
for(int i = 0; i < nrOfMedias; i++)
{
tempArray[i] = (*medias)[i];
}
delete [] *medias;
(*medias) = tempArray;
(*medias)[nrOfMedias] = Book("newTitle");
nrOfMedias++;
}
int main()
{
int numMedia = 10;
Media * myArray = new Media[numMedia];
addMedia(&myArray, numMedia);
for (int i = 0; i < numMedia; i++)
{
cout << i << ") " << myArray[i].m_strTitle << endl;
}
return 0;
}
你不需要delete [] tempArray;
,因为tempArray
实际上指向与medias
在medias = tempArray;
之后相同的内存块
你的函数在这条线上工作得很好,但我假设你知道你传递了什么Media* medias[]
相关文章:
- 如何仅为一个函数添加延迟
- 如何将带有参数的愚蠢函数添加到愚蠢的执行器中?
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- C++泛型包装类,它为某些函数添加了额外的处理
- 将自己的函数添加到 ifstream
- 如何调用运算符函数添加两个对象?
- 如何在保持多态性的同时,将成员函数添加到需要它的继承类中,而不会影响其他同级类?
- Clang在发出LLVM IR时向所有函数添加noinline属性
- 将构造函数添加到boost.python子类导致参数不匹配错误
- 我需要为返回容器副本的函数添加锁吗
- 是否可以执行范围添加更新,将线性函数添加到最大分段树中
- 将第一个虚拟函数添加到类中
- 如何告诉编译器向编译的每个函数添加一个函数调用
- Doxygen没有为函数添加文档
- 在C++中为纯虚拟/抽象函数添加主体
- 如何在不重写 lib 类的情况下将函数添加到它
- ATL COM将函数添加到excel中
- 向成员函数添加常量限定符
- 向简单日志记录函数添加线程安全性
- 将函数添加到单独文件的正确方式