【问题标题】:c++11 is there any reason to use poiner to vector std::vector<object> * vec;c++11有什么理由使用指向向量的指针 std::vector<object> * vec;
【发布时间】:2018-07-23 00:22:19
【问题描述】:

它有什么优点,还是它的坏主意?为什么不好?

std::vector<object> * vec;

我发现了类似的问题,但它没有解释我们为什么要使用/不使用它,这就是我问的原因。

C++ Any benifits using pointer to vector of pointers?

我知道有的唯一原因:

指针可能为空

std::vector<object> * vec == nullptr;
if (vec == nullptr) vec = new std::vector<object>(size);

大小为 8

堆栈上的指针是 8,而向量在堆栈上有 3 个指针,所以 24

还有其他原因吗?

【问题讨论】:

  • 答案应该和这个stackoverflow.com/questions/22146094/…一样,我想不出有什么不同的原因vector
  • 具体是什么情况?
  • 使用这种东西可能是有原因的——在非常特殊的情况下使用几乎任何类型通常都是有原因的。不过,您不想积极寻找这些情况。当您遇到它们时,您会认识它们。我不能说我曾经在我自己的任何代码中使用过指向向量的指针。

标签: c++ pointers vector


【解决方案1】:

仅在极少数情况下。例如,我可能有这样的功能:

int foo(const Foo& x, std::vector<int>* y);

给定 Foo,它计算一些整数值并返回它。如果 y 不为 NULL,它还会向 y 存储其他内容。

不要使用指向向量的指针,除非你确定你需要它。

【讨论】:

  • 那么也许可以告诉为什么要使用参考?如果你问他,他会问谁?
  • 大概是“如果y不是NULL”部分是指针参数而不是引用的原因。但请注意,您不能有效地“将其他内容存储到y”,因为*yconsty 本身是本地的。
  • 嗯,我们这里有变量 y 指向 const 向量?那么已经指向的向量可以改变,但它仍然是指针的相同内存地址?还是相反?
  • @NeilButterworth 因为没有空引用之类的东西。
  • @yourstruly - 移除 const.
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2021-02-17
  • 2012-04-19
  • 2015-11-05
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多