![](/img/trans.png)
[英]Through base class's pointer we can't access derived class specific members
[英]Why do we need a pointer to a class if we can instantiate an object of it and access members of the class?
我在这里有点困惑。 如果我们可以实例化一个类的对象并访问成员方法那么为什么指向一个类的指针? 它有什么好处吗? 我们何时使用指向类的指针,何时实例化它的对象?
谢谢。
您可能不需要指向类的指针。 如果你的类很小,没有通过基类表现出多态行为,或者需要花费任何实例化的东西,你可能只需要动态地删除一个并完成。
但在许多情况下,我们需要指针,因为:
如果我们可以实例化一个类的对象并访问成员方法那么为什么指向一个类的指针?
如果你只有一个基类而没有派生类,那么最好在堆栈上创建对象而不是指向类的指针。 在后者中,您应该在指针上调用delete
来返回new
获取的资源。 (还要确保堆栈永远不会溢出。如果需要大量的实例数组,那么使用new
实例化是唯一的选择。)
class foo
{
int a ;
};
foo obj1 ;
foo obj2 = obj1 ; // Copy construction. Both obj2, obj1 have it's independent
// copy of objects. (Deep copy)
foo *obj3 = new foo ;
foo *obj4 = obj3 ; // Copy construction. However, both obj3, obj4 point to the
// same object. (Shallow copy)
// You should be careful in this case because deletion of obj3
// makes obj4 dangling and vice versa.
它有什么好处吗?
多态性因为它仅适用于指针/引用。
我们何时使用指向类的指针,何时实例化它的对象?
这取决于要求。 如前所述,如果你只有一个基类创建堆栈上的对象是一个更好的选择。
一个原因可能是表现。 想象一下,你有一些类的100个实例。 如果你没有使用指针而你想要做一些事情,比如将这些实例从一个容器复制到另一个容器,那么由于需要在每个容器上调用复制构造函数,所以会产生相当大的开销。 但是,如果你有指向那些实例的指针,那么唯一真正被复制的是指针使操作更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.