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

C++ 如何在另一个函数中使用指向一个函数中的对象的指针?,c++,arrays,object-lifetime,C++,Arrays,Object Lifetime,我有一个指向我将在一个方法中使用的对象的指针。但是我需要在另一个方法中再次使用相同的指针,如何在不声明为全局对象的情况下实现这一点。这是我充满活力的投标成就的一部分 Shape是父类,矩形是子类 int main(){ switch (choice){ case 1: create(); break; case 2: process(); break; } } create(){ Shape *shape[3]; shape[0]=&objRectangle; } proc

我有一个指向我将在一个方法中使用的对象的指针。但是我需要在另一个方法中再次使用相同的指针,如何在不声明为全局对象的情况下实现这一点。这是我充满活力的投标成就的一部分 Shape是父类,矩形是子类

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.
}
intmain(){
开关(选择){
案例1:
创建();
打破
案例2:
过程();
打破
}
}
创建(){
形状*形状[3];
形状[0]=&ObjectAngle;
}
过程(){
for(int i=0;iprint;//我想这样做。
}
现在我不能这样做,因为一旦形状对象退出创建过程,它就会消失。
请协助。

局部变量是在上创建的。这意味着这些变量总是在函数完成时销毁

尚不清楚如何检索
矩形
对象,以及如何从粘贴的代码中处理
形状
对象指针数组。但您可能需要两件事:

  • 您的
    矩形
    不能在堆栈上,但必须在堆上分配
  • 您需要访问要访问的所有位置上的
    形状
    数组
  • 我建议您创建一个类,该类将封装您的函数,并使用
    new
    delete
    关键字动态实例化和删除
    Shape
    对象。我认为这是最简单的方法。类似的方法应该可以:

    /*接口*/
    课例
    {
    形状*形状[3];
    公众:
    示例();
    ~Example();
    void create();
    无效过程();
    };
    /*实施*/
    示例::示例(){}
    示例::~Example()
    {
    删除形状[0];
    }
    void示例::create()
    {
    形状[0]=新矩形();
    }
    void示例::进程()
    {
    形状[0]->print();
    }
    /*主要*/
    int main()
    {
    示例();
    create();
    例如:process();
    }
    
    与其他人一样,我建议让库为您管理内存

    为了能够使用动态绑定和
    std::vector
    ,您应该开始将向量分配为

        std::vector<Shape*> shape(3);
    
    缺点是你仍然需要管理向量项所指向的内存(事实上它们只是C指针)。因此,你为什么不考虑做< /P>?
        std::vector< std::tr1::shared_ptr< Shape > > shape(3);
    
    正确创建所需的智能指针


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

    请发布即使是近似编译的代码。否则很难帮助您。@pmr他希望
    形状
    数组超出声明的范围;他只需要
    向量
    新[]
    @SethCarnegie,但显然他甚至不知道如何迭代数组。向他展示
    新的
    会很疯狂。使用类和函数参数?!?在你至少理解函数参数之前,你真的不应该弄乱指针。这个解决方案也不对。
    示例
    是堆栈分配的,并且应该使用
    Example-Example
    初始化。抱歉,我在完成之前错误地提交了答案。我相信现在答案是正确的。当然,
    Example
    是在堆栈上分配的。我想问题出在
    Rectangle
    对象上。@JanVčelák我不能使用referencem&访问项目。@rasul1719435仅当t对象存在于您想要访问它的时候。您需要了解堆栈和堆之间的区别。根据变量定义的位置,C++中变量是在哪里分配的。从它开始。
        std::vector< std::tr1::shared_ptr< Shape > > shape(3);
    
         shape[0] = std::tr1::shared_ptr< Shape >(new Rectangle);