C++ 如何在另一个函数中使用指向一个函数中的对象的指针?
我有一个指向我将在一个方法中使用的对象的指针。但是我需要在另一个方法中再次使用相同的指针,如何在不声明为全局对象的情况下实现这一点。这是我充满活力的投标成就的一部分 Shape是父类,矩形是子类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
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);