我之前在软件工程堆栈交换中遇到过这个问题和答案。问题是,"Why are pointers not recommended when coding with c++?" .评分最高的答案提供两点,第二点是感兴趣的点。它指出:
Most uses of pointers in C++ are unnecessary.
他的规范有些冗长,但作者在其中指出,“......现代 C++ 习语通常根本不需要指针。”。
首先想到的是 STL 容器中的多态性。在不使用指针的情况下,这在 C++ 中如何实现?
经过一些研究,this这是我所能发现的全部(剧透:它没有帮助)。
最佳答案
至少在 C++11 中是可能的,但在我看来,这是个坏主意:
#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 至少与该 vector 一样长,否则引用将变为未定义(上面的代码是错误的)。
关于c++ - 多态性和 STL 容器……不需要指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47342220/