要实现的需求:
拿到一个指向数据的void * 指针;用这个指针替换旧对象数据。
要求: 不额外申请内存
我在这过程中搜过的问题 && 看的知识点:
enum 使用
现在我有一个 enum 类型的结构体:
enum Flags {
ON_DEVICE = 0x01,
SHARE = 0x02,
DATA = 0x04,
SYNC = 0x010000,
};
uint32_t flags;
问:我该如何给flags赋值呢?
答:
flags = ON_DEVICE
cout<<flags<<endl;
1
use std::move to pointer
对pointer 使用std::move 是无意义的。
std::move 是右值引用,它将move的右侧对象,转移给左边 ⬅️,减少拷贝:
int a = 9;
int b = std::move(a);
等价于
int a;
int b = 9;
a 去哪了呢? a 为空了,b 获得了a 之前的值:
if b has, its own buffer in memory - after std::move()ing
the compiler can have another object own it instead.
再来看pointer, pointer 并不拥有资源,它只是指向内存,对它进行 std::move操作 和直接进行操作没有区别,返回对都是指向的地址。所以使用std::move 对 引用和指针而已都是无意义的。
std::vector指针的下标“[]”的使用
下标【】返回的是对象的引用,vector 会自动调整自身大小来满足所需。
我比较疑惑的是 vector 的内存机制,我之前只知道vector的的大小会自动调整,一旦达到容量极限,会重新申请一个两倍大小的新内存。
这样,在这个问题上就是:
修改前,用与存放的vector大小为1,实际存放的数据为空。
我现在需要修改vector中的对象(因为只有一个,所以是vector.front() )
shared_ptr
我先是想要修改旧的对象:将旧数据指针,指向新指针指向的对象。
但是发现一个问题,这旧的数据指针是shared_ptr指针,新&旧指针指向同一个对象。
引用计数=2 ,新指针有可能在其他地方也会用到,但只有引用计数=0时指针才会释放所值对象。意味着要等新指针不再使用才能释放,不知道啥时候能销毁。。
体现不了智能指针自动销毁特性。