{
DWORD aaaa;
char bbbb[1024];
void cls()
{
ZeroMemory(this,sizeof(STEST));
}
};
我自己试了一下,这样可以用?
请高手指明,这样会不会有不安全因素?
this 就是指向的结构体本身吧?
16 个解决方案
#1
个人觉得应该可以吧,等待高手解答。
#2
貌似可以,不过结构体里有CTime会报错。
#3
可以。
this就是一个指向对象的指针。
this就是一个指向对象的指针。
#4
应该通过析构函数。
#5
这个还确实不太清楚,
不过不建议这样的编程风格!
不过不建议这样的编程风格!
#6
这只是把那块内存的数据都变成了0,栈指针还是没有移动。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
#include "iostream"
#include "memory.h"
using namespace std;
class A
{
public:
int i;
int b;
void func()
{
memset(this,0,sizeof(A));
}
};
int main()
{
A a;
A* pa=&a;
a.func();
cout<<(*pa).i;
}
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
#7
这只是把那块内存的数据都变成了0,栈指针还是没有移动。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
#include "iostream"
#include "memory.h"
using namespace std;
class A
{
public:
int i;
int b;
void func()
{
memset(this,0,sizeof(A));
}
};
int main()
{
A a;
A* pa=&a;
a.func();
cout<<(*pa).i;
}
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
#8
试了一下,很奇怪,我的类有虚函数的,的确把虚函数表指针也清0了.
但是还是可以调用虚函数.
不过还是同意你们的观点,这样清0的做法,还是千万不要做.
但是还是可以调用虚函数.
不过还是同意你们的观点,这样清0的做法,还是千万不要做.
#9
呃。。试了下,用对象可以调用虚函数,但是指针调用就出错了。
这也就是那啥,对象不具有多态性,只有指针和引用才能表现出多态。。
对象的函数调用,是在编译时就确定了,编译器直接把函数调用转换成 执行到函数的入口地址了。但是指针和引用是运行时绑定的,他的入口地址的确定是要运行时查虚函数表的
这也就是那啥,对象不具有多态性,只有指针和引用才能表现出多态。。
对象的函数调用,是在编译时就确定了,编译器直接把函数调用转换成 执行到函数的入口地址了。但是指针和引用是运行时绑定的,他的入口地址的确定是要运行时查虚函数表的
#10
如果清楚自已的结构的定义,没有虚函数,没有动态数组类型成员变量(如string),这样做还是比较有效率的。
#11
7楼正确
Test* pT = new Test;
pT->VF();
memset(pT,0,sizeof(Test));
pT->VF();
这样试真的出错了.
今天又学习了!
Test* pT = new Test;
pT->VF();
memset(pT,0,sizeof(Test));
pT->VF();
这样试真的出错了.
今天又学习了!
#12
- - 这么做有什么意义呢。。如果要删除这个对象,那么函数返回,栈自然就把这个对象删除了。
如果要清空了赋新值,那就直接赋值。。
如果要清空了赋新值,那就直接赋值。。
#13
赫赫。。互相学习。。今天也向你学到了MAKEINTRESOURCEA
#14
struct 就是变相的 class ,只不过默认的权限是 public 罢了。
当 STEST 是一个 POD 数据类型时,可以这样用
否则十有八九要出错
当 STEST 是一个 POD 数据类型时,可以这样用
否则十有八九要出错
#15
如果结构中的成员变量不包含虚函数,而且这个类也没有虚函数,可以这么用
#16
感觉几位的回复,其实我只是单纯的想初始化结构体,
里面只有几个数据而已
看来是可行的,
非常 感谢各位
#1
个人觉得应该可以吧,等待高手解答。
#2
貌似可以,不过结构体里有CTime会报错。
#3
可以。
this就是一个指向对象的指针。
this就是一个指向对象的指针。
#4
应该通过析构函数。
#5
这个还确实不太清楚,
不过不建议这样的编程风格!
不过不建议这样的编程风格!
#6
这只是把那块内存的数据都变成了0,栈指针还是没有移动。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
#include "iostream"
#include "memory.h"
using namespace std;
class A
{
public:
int i;
int b;
void func()
{
memset(this,0,sizeof(A));
}
};
int main()
{
A a;
A* pa=&a;
a.func();
cout<<(*pa).i;
}
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
#7
这只是把那块内存的数据都变成了0,栈指针还是没有移动。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
这样不会出错,你的这个结构体只存了几个变量而已,等于是把那块内存的变量所有的值都设置成了0,这块的值也是正确的。
等到函数返回的时候,栈指针移动,栈顶的元素依次pop出去,这当然可以。
虽然你这样设置了0,但是这个对象依然存在,里面的数据照样可以访问。
例如
#include "iostream"
#include "memory.h"
using namespace std;
class A
{
public:
int i;
int b;
void func()
{
memset(this,0,sizeof(A));
}
};
int main()
{
A a;
A* pa=&a;
a.func();
cout<<(*pa).i;
}
不过这个类如果有虚函数的话又不一样了,你这么操作会把虚函数表的指针也设置成0了。那这个对象也就是错误的了。你不能调用其中的虚函数了。
#8
试了一下,很奇怪,我的类有虚函数的,的确把虚函数表指针也清0了.
但是还是可以调用虚函数.
不过还是同意你们的观点,这样清0的做法,还是千万不要做.
但是还是可以调用虚函数.
不过还是同意你们的观点,这样清0的做法,还是千万不要做.
#9
呃。。试了下,用对象可以调用虚函数,但是指针调用就出错了。
这也就是那啥,对象不具有多态性,只有指针和引用才能表现出多态。。
对象的函数调用,是在编译时就确定了,编译器直接把函数调用转换成 执行到函数的入口地址了。但是指针和引用是运行时绑定的,他的入口地址的确定是要运行时查虚函数表的
这也就是那啥,对象不具有多态性,只有指针和引用才能表现出多态。。
对象的函数调用,是在编译时就确定了,编译器直接把函数调用转换成 执行到函数的入口地址了。但是指针和引用是运行时绑定的,他的入口地址的确定是要运行时查虚函数表的
#10
如果清楚自已的结构的定义,没有虚函数,没有动态数组类型成员变量(如string),这样做还是比较有效率的。
#11
7楼正确
Test* pT = new Test;
pT->VF();
memset(pT,0,sizeof(Test));
pT->VF();
这样试真的出错了.
今天又学习了!
Test* pT = new Test;
pT->VF();
memset(pT,0,sizeof(Test));
pT->VF();
这样试真的出错了.
今天又学习了!
#12
- - 这么做有什么意义呢。。如果要删除这个对象,那么函数返回,栈自然就把这个对象删除了。
如果要清空了赋新值,那就直接赋值。。
如果要清空了赋新值,那就直接赋值。。
#13
赫赫。。互相学习。。今天也向你学到了MAKEINTRESOURCEA
#14
struct 就是变相的 class ,只不过默认的权限是 public 罢了。
当 STEST 是一个 POD 数据类型时,可以这样用
否则十有八九要出错
当 STEST 是一个 POD 数据类型时,可以这样用
否则十有八九要出错
#15
如果结构中的成员变量不包含虚函数,而且这个类也没有虚函数,可以这么用
#16
感觉几位的回复,其实我只是单纯的想初始化结构体,
里面只有几个数据而已
看来是可行的,
非常 感谢各位