#include "stdafx.h"
#include<iostream>
#include<vector>
#include<bitset>
#include<algorithm>
#include<queue>
using namespace std;
char* transformer(void* a) {
printf("a = %p\n", a);
char* c = reinterpret_cast<char*>(a);
printf("c = %p\n", c);
printf("*c = %c\n", *c);
return c;
}
int main() {
char* t;
char b = 'j';
char* ptb = &b;
printf("ptb = %p\n", ptb);
printf("*ptb = %c\n", *ptb);
void* tmp = reinterpret_cast<void*>(&b);
printf("tmp = %p\n", tmp);
cout << "===========" << endl;
t = transformer(tmp);
printf("t = %p\n", t);
printf("*t = %c\n", *t);
return 0;
}
std::make_shared 一次性为int对象和用于引用计数的数据都分配了内存,而new操作符只是为int分配了内存。所以局部make_shared,其数据内存会被析构。
void* func(int* b) {
printf("*b = %d\n", *b);
std::shared_ptr<int> p = std::make_shared<int>();
*p = *b;
printf("*p = %d\n", *p);
printf("p_count =%d\n", p.use_count());
printf("p.get() =%p\n", p.get());
printf("*p.get() =%d\n", *p.get());
void* data = reinterpret_cast<void*>(p.get());
printf("data =%p\n", data);
return data;
}
int main()
{
int b = 7;
printf("&b =%p\n", &b);
void* recv = func(&b);
printf("recv =%p\n", recv);
int* b2 = reinterpret_cast<int*>(recv);
printf("b2 =%p\n", b2);
printf("*b2 =%d\n", *b2);
}