添加部分注释 2020/6/29 by xana
回答下面输出的结果:
// C++ define
struct Foo
{
Foo(int32_t a){ i32 = a; }
int32_t i32;
int16_t i16;
int8_t _pad[2];
};
void* FactoryStack(int32_t b)
{
Foo f(b);
return (void*)&f;
}
void* FactoryHeap(int32_t b)
{
Foo *pp = new Foo(b);
return (void*)pp;
}
// Question1 作用域的GC
void main()
{
void *p = nullptr;
if (true)
{
Foo f(114);
p = (void*)&f;
}
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
// Question2 作用域的GC
void main()
{
void *p = nullptr;
p = FactoryStack(114);
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
// Question3 作用域的GC
void main()
{
void *p = nullptr;
p = FactoryHeap(114);
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
// Question4 本质上是函数的理解
void main()
{
void *p = nullptr;
([](void *pp)
{
Foo f(114);
pp = (void*)&f;
})(p);
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
// Question5 堆上的数据去哪了?
void main()
{
void *p = nullptr;
([](void *pp)
{
pp = new Foo(114);
})(p);
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
// Question6 这个结果是否符合预期?出了什么问题?
void main()
{
void *p = nullptr;
([](void* pp)
{
Foo f(114);
memcpy(pp, &f, sizeof(Foo));
})(p);
cout << p << "---" << ((Foo *)p)->i32 << endl;
system("pause");
}
(所以就不应该有结构体的概念,相当于用完就丢的图纸,有用的只有内存和指针








网友评论