N******K 发帖数: 10202 | 1 p1= new (objectA);
delete p1;
p2= new (objectA);
这时候 p1的值和p2的值是一样的 但是 两个指针代表了两个实例 尽管都属于同一类
这样 IsValid(p2) 会返回 ture 但是 IsValid(p1)也会返回true
如果有一个类似weak_ptr的 但是不用lock 能直接用的智能指针就好了
可以用 shared_ptr() 把deletor 给设置为空操作
其实需要的是 handle_ptr
std::handle_ptr hp(new ObjectA)
std::shared_ptr sp=hp; 就可以进行转换 |
l*********s 发帖数: 5409 | 2 set an id field in the constructor
【在 N******K 的大作中提到】 : p1= new (objectA); : delete p1; : p2= new (objectA); : 这时候 p1的值和p2的值是一样的 但是 两个指针代表了两个实例 尽管都属于同一类 : 这样 IsValid(p2) 会返回 ture 但是 IsValid(p1)也会返回true : 如果有一个类似weak_ptr的 但是不用lock 能直接用的智能指针就好了 : 可以用 shared_ptr() 把deletor 给设置为空操作 : 其实需要的是 handle_ptr : std::handle_ptr hp(new ObjectA) : std::shared_ptr sp=hp; 就可以进行转换
|
N******K 发帖数: 10202 | 3 id=construction time+ thread id
good idea
【在 l*********s 的大作中提到】 : set an id field in the constructor
|
t*****n 发帖数: 4908 | 4 114人浏览,没人看出有毛病?现在的学生都不写c了?下巴都掉了。
【在 N******K 的大作中提到】 : p1= new (objectA); : delete p1; : p2= new (objectA); : 这时候 p1的值和p2的值是一样的 但是 两个指针代表了两个实例 尽管都属于同一类 : 这样 IsValid(p2) 会返回 ture 但是 IsValid(p1)也会返回true : 如果有一个类似weak_ptr的 但是不用lock 能直接用的智能指针就好了 : 可以用 shared_ptr() 把deletor 给设置为空操作 : 其实需要的是 handle_ptr : std::handle_ptr hp(new ObjectA) : std::shared_ptr sp=hp; 就可以进行转换
|
N******K 发帖数: 10202 | 5 有啥毛病?
我的意思是 将object的地址注册 isvalid 通过判断是否注册过来决定 这种方法无效
【在 t*****n 的大作中提到】 : 114人浏览,没人看出有毛病?现在的学生都不写c了?下巴都掉了。
|
t*****n 发帖数: 4908 | 6 p1 p2 ?
【在 N******K 的大作中提到】 : 有啥毛病? : 我的意思是 将object的地址注册 isvalid 通过判断是否注册过来决定 这种方法无效
|
N******K 发帖数: 10202 | 7 你觉得这两个名字不够洋气?
改为 tom jerry?
【在 t*****n 的大作中提到】 : p1 p2 ?
|
t****t 发帖数: 6806 | 8 你这么做的目的是什么?
如果你需要每个new返回不同的值, 有现成的模拟器(valgrind这类的)可以帮你做到这
一点.
【在 N******K 的大作中提到】 : p1= new (objectA); : delete p1; : p2= new (objectA); : 这时候 p1的值和p2的值是一样的 但是 两个指针代表了两个实例 尽管都属于同一类 : 这样 IsValid(p2) 会返回 ture 但是 IsValid(p1)也会返回true : 如果有一个类似weak_ptr的 但是不用lock 能直接用的智能指针就好了 : 可以用 shared_ptr() 把deletor 给设置为空操作 : 其实需要的是 handle_ptr : std::handle_ptr hp(new ObjectA) : std::shared_ptr sp=hp; 就可以进行转换
|
t*****n 发帖数: 4908 | 9 IT科学家?还是先读读C的书吧。
【在 N******K 的大作中提到】 : 你觉得这两个名字不够洋气? : 改为 tom jerry?
|
l*********s 发帖数: 5409 | 10 syntax error? dangling pointer?
【在 t*****n 的大作中提到】 : 114人浏览,没人看出有毛病?现在的学生都不写c了?下巴都掉了。
|
|
|
N******K 发帖数: 10202 | 11 在写注册类的时候发现的问题
p=new(object);
ObjectRegistrar.register(p);
如果两个object紧连着new和delete
比如
p1=new(object);
delete p1
p2=new(object)
ObjectRegistrar object表格里面 key是 raw pointer 这个时候就不唯一了
ObjectRegistrar.IsValid(p) 这样的操作毫无意义了
【在 t****t 的大作中提到】 : 你这么做的目的是什么? : 如果你需要每个new返回不同的值, 有现成的模拟器(valgrind这类的)可以帮你做到这 : 一点.
|
N******K 发帖数: 10202 | 12 你就不能把问题直说么 ?
【在 t*****n 的大作中提到】 : IT科学家?还是先读读C的书吧。
|
z*******3 发帖数: 13709 | 13 都交给学ee的去搞了
以后ce和ee将会彻底同化成一个专业
你悲愤也没用
【在 t*****n 的大作中提到】 : 114人浏览,没人看出有毛病?现在的学生都不写c了?下巴都掉了。
|
t****t 发帖数: 6806 | 14 本来就毫无意义, 我的问题是, 你register了想要干嘛, 如果只是查错(isvalid), 有现
成的工具, 不需要发明轮子.
【在 N******K 的大作中提到】 : 在写注册类的时候发现的问题 : p=new(object); : ObjectRegistrar.register(p); : 如果两个object紧连着new和delete : 比如 : p1=new(object); : delete p1 : p2=new(object) : ObjectRegistrar object表格里面 key是 raw pointer 这个时候就不唯一了 : ObjectRegistrar.IsValid(p) 这样的操作毫无意义了
|
N******K 发帖数: 10202 | 15 就是想搞轮子
有啥好工具?
有现
【在 t****t 的大作中提到】 : 本来就毫无意义, 我的问题是, 你register了想要干嘛, 如果只是查错(isvalid), 有现 : 成的工具, 不需要发明轮子.
|
t****t 发帖数: 6806 | 16 不是说了valgrind吗? 要交钱的有purify...
【在 N******K 的大作中提到】 : 就是想搞轮子 : 有啥好工具? : : 有现
|
N******K 发帖数: 10202 | 17 valgrind 不支持windows
【在 t****t 的大作中提到】 : 不是说了valgrind吗? 要交钱的有purify...
|
t****t 发帖数: 6806 | 18 不是还有purify吗?
【在 N******K 的大作中提到】 : valgrind 不支持windows
|
N******K 发帖数: 10202 | 19 没钱啊
【在 t****t 的大作中提到】 : 不是还有purify吗?
|
t****t 发帖数: 6806 | 20 多新鲜啊, 没钱能办什么事.
【在 N******K 的大作中提到】 : 没钱啊
|
p***o 发帖数: 1252 | 21 Try the CRT Debug Library on MSVC.
【在 N******K 的大作中提到】 : 没钱啊
|
h*****a 发帖数: 1718 | 22 lol
【在 t****t 的大作中提到】 : 多新鲜啊, 没钱能办什么事.
|