键入派生类型的动态数组的共享指针的问题?

时间:2016-09-21 17:52:22

标签: c++ c++11 shared-ptr

来自Scott Meyers的Effective Modern C ++,参考shared_ptrs到动态数组(第19项)。

  

首先,std :: shared_ptr不提供operator [],因此索引到数组需要基于指针算法的笨拙表达式。另一方面,std :: shared_ptr支持对单个对象有意义的派生到基础指针转换,但在应用于数组时类型系统中打开的孔。 (因此,std :: unique_ptr API禁止此类转换。)

int limit = Charset.forName("UTF-8").encode("hello world").limit();
System.out.println(limit);

索引可能会变得尴尬,但是什么类型的"漏洞"通过使用指向具有派生到基础转换的数组的共享指针,在类型系统中打开?我很难想到一个例子。无论派生到基础指针转换面临什么问题,我都不知道数组的使用是如何引起它们的。上面的例子很好,所以在我开始看到这个问题之前需要多大程度的复杂性?

我知道最好只使用std :: array或std :: vector而不是指向动态数组,但我对这一点感到好奇。

0 个答案:

没有答案