如何在另一个函数中使用指向一个函数中的对象的指针?
How do I use a pointer to an object from one function in another function?
我有一个指向一个对象的指针,我将在一种方法中使用它。 但是我需要在另一种方法中再次使用相同的指针,如何在不声明为全局对象的情况下实现这一点。这是我动态竞价成就的一部分 形状是父类,矩形是子类。
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
对象指针数组。但您可能需要两样东西:
- 您的
Rectangle
不得位于堆栈上,但必须在堆上分配。 - 您需要访问要访问的所有位置的
shape
数组。
我建议您创建一个类,该类将包装您的函数,并使用new
和delete
关键字动态实例化和删除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();
}
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用