繁体   English   中英

如何使函数返回指向C ++中数组或对象的指针?

[英]How to make function return pointer to an array or object in C++?

我对找到其他语言中的简单事物的许多答案感到困惑。 我想获得对包含在类或结构中的对象的引用。 我想使用两个不同函数之一(在这里-getData ())。

题:

因此,我不确定要使用哪一个,它们似乎在做相同的事情。 另外,因为这是一个工会,我是否应该出于某些原因而在意? 最重要的问题是-我不确定在某些答案中找到的删除部分,这使我感到害怕,因为我显示的此代码示例不完整,并且有时会导致某些内存泄漏。

#include <iostream>
#include <stdint.h>

using namespace std;

class settings_t {
  private:
  static const  long b1 =0;
    uint8_t setmap;
  public:
    uint8_t myBaseID; 
    uint8_t reserved1;
    uint8_t reserved2;
};  

class test1 {
  public: //actually, I want this to be private
    long v1;
    settings_t st;
    union {
      uint8_t data[4];
      uint32_t m1;
      settings_t st1;
    };
  public:
    uint8_t * getData() {
      return data;
    }
    uint8_t (&getData2())[4] {
      return data;
    }
};

int main() {
  test1 t1;
  t1.data[2]=65;
  uint8_t *d1 = t1.getData();
  cout<<" => " << d1[2];
  d1[2]=66;
  uint8_t *d2 = t1.getData2();
  cout<<" => " << d2[2];
}

c ++与诸如c#或java之类的语言的主要区别在于,它不为您提供内置的内存管理(不是托管语言)。 因此,如果程序使用c ++分配内存,则程序有责任在不需要内存时释放内存。 因此,根据此要求delete答案。

但是,在您这种情况下, getData()函数将返回指向数据的指针,该数据是类test1的一部分。 这是一个数组,只要存在此类的对象,该数组就会存在。 getData的两个版本都可以使用。

您没有使用任何动态数据分配,类型为test1的对象t1已分配在main函数的堆栈上,并且将一直存在直到程序退出。 您不必担心“删除”。

您使用的两种方法之间的区别在于,第一种方法并不关心它返回的数组大小,而另一种方法则不管。 因此,第二种方法的实际用途非常有限,但是提供了更好的语法检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM