假设我有一些C++方法返回一个指向对象的指针.头文件中的内容如下所示:
uint8_t* getData(void);
Run Code Online (Sandbox Code Playgroud)
这个人返回一个字节数组,但没有任何内容表明这是一个动态的或静态生成的数据(本地的本地数据或用new创建).
C++中是否有特定的命名约定来区分返回动态分配的内存的方法(因此必须由请求者删除),而只返回对静态定义数据的引用的方法?
这样做的首选方式是什么,还是取决于具体情况?
我的约定是:
uint8_t* getData();
Run Code Online (Sandbox Code Playgroud)
是静态分配的,或者至少删除这些数据不是我的责任。但是如果它是一个数组我会写:
pair<uint8_t*,uint8_t*> getData();
Run Code Online (Sandbox Code Playgroud)
或者为此定义一个容器。
auto_ptr<uint8_t> getData();
unique_ptr<uint8_t> getData();
Run Code Online (Sandbox Code Playgroud)
分配单个对象,从现在开始我拥有它。
shared_ptr<uint8_t> getData();
Run Code Online (Sandbox Code Playgroud)
分配具有共享所有权的单个对象。
vector<uint8_t> getData();
Run Code Online (Sandbox Code Playgroud)
分配一个数组,向量拥有内存。