如何在另一个函数中使用指向一个函数中的对象的指针?

How do I use a pointer to an object from one function in another function?

本文关键字:函数 一个 指针 对象 另一个      更新时间:2023-10-16

我有一个指向一个对象的指针,我将在一种方法中使用它。 但是我需要在另一种方法中再次使用相同的指针,如何在不声明为全局对象的情况下实现这一点。这是我动态竞价成就的一部分 形状是父类,矩形是子类。

int main(){
switch (choice){
case 1:
create();
break;
case 2:
process();
break;
}
}
create(){
Shape *shape[3];
shape[0]=&objRectangle;
}
process(){
for(int i=0;i<3;i++){
shape->print; // I want to acchieve like this.
}

现在我不能这样做,一旦退出创建过程,形状对象就会消失。 请协助。

我建议像其他人一样,让图书馆为您管理内存。

为了能够使用动态绑定和std::vector您应该开始分配(主要)您的向量

std::vector<Shape*> shape(3);

这样做,您可以访问动态绑定的向量条目,如下所示

shape[0]->process();

不好的是,您仍然必须管理由向量条目指向的内存(实际上它们只是 C 指针)。因此,你为什么不考虑做

std::vector< std::tr1::shared_ptr< Shape > > shape(3);

这样,智能指针std::tr1::shared_ptr将在指向的Shape对象超出范围时为您释放内存。

此外,在此设置中,应将Shape类型对象分配为

shape[0] = std::tr1::shared_ptr< Shape >(new Rectangle);

以正确创建所需的智能指针。

最后,向量shape应通过引用(或const引用)传递给使用它的函数。

局部变量是在调用堆栈上创建的。这意味着当函数完成时,这些变量总是被销毁。

目前尚不清楚如何检索Rectangle对象以及如何从粘贴的代码中处理Shape对象指针数组。但您可能需要两样东西:

  1. 您的Rectangle不得位于堆栈上,但必须在堆上分配。
  2. 您需要访问要访问的所有位置的shape数组。

我建议您创建一个类,该类将包装您的函数,并使用newdelete关键字动态实例化和删除Shape对象。我相信这是最简单的方法。这样的事情应该有效:

/* interface */
class Example
{
Shape *shape[3];
public:
Example();
~Example();
void create();
void process();
};
/* implementation */
Example::Example() {}
Example::~Example()
{
delete shape[0];
}
void Example::create()
{
shape[0] = new Rectangle();
}
void Example::process()
{
shape[0]->print();
}
/* main */
int main()
{
Example example();
example.create();
example.process();
}
相关文章: