[英]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.