我之前在软件工程堆栈交换中遇到过这个问题和答案。问题是,"Why are pointers not recommended when coding with c++?"。评分最高的答案提供两点,第二点是感兴趣的答案。它声明:
C ++中指针的大多数用法都是不必要的。
他的规范有点冗长,但作者在其中指出,“......现代C ++习语通常根本不需要指针。”
首先想到的是STL容器中的多态性。如果不使用指针,C ++中的许多其他内容是如何实现的呢?
经过一些研究,this是我能够发现的(剧透:它没有帮助)。
答案 0 :(得分:0)
至少在C ++ 11中,有可能是IMO,这是一个坏主意:
#include <vector>
#include <iostream>
#include <functional>
namespace
{
struct A
{
virtual void operator()(void) { std::cout << "in A" << std::endl; }
};
struct B : public A
{
virtual void operator()(void) { std::cout << "in B" << std::endl; }
};
}
int main(void)
{
A a;
B b;
std::vector<std::reference_wrapper<A>> v;
v.push_back(a);
v.push_back(b);
v[0]();
v[1]();
return 0;
}
我同意上述评论。当您需要在容器中执行动态多态时,请使用智能指针。他们运作良好。当它们被智能指针包裹时,指针也不错。 警告:在上面,你必须确保a和b至少与该向量一样长,否则引用变为未定义(上面的代码是坏的)。