一:delete说明
delete操作符可以用于任何变量,将其设置成默认值0。
如果对动态数组使用delete,则删除所有元素,其长度变为0。
如果对静态数组使用delete,则重置所有索引。
如果对map类型使用delete,什么都不会发生。
但如果对map类型中的一个键使用delete,则会删除与该键相关的值。
二:案例1
pragma solidity ^0.4.20;
contract DeleteDemo1{
uint public data = 100;
uint[] public dataArray = [uint(1), 2, 3];
event e(string _str, uint _u);
event eArr(string _str, uint[] _u);
function doDelete(){
uint x = data;
e("x", x);
delete x;
e("after x", x);
e("data", data);
delete data;
e("after data", data);
uint[] y = dataArray;
eArr("y", y);
delete dataArray;
eArr("after y", y);
}
}
三:案例2
pragma solidity ^0.4.20;
contract DeleteDemo2{
struct MyStruct{
mapping (uint => uint) myMap;
uint myAmount;
}
uint[] myArray;
MyStruct myStruct;
# 被constructor修饰,表示构造函数
constructor(uint amount, uint key, uint value, uint[] array) public {
myStruct = MyStruct(amount);
myStruct.myMap[key] = value;
myArray = array;
}
function reset() public {
delete myStruct;
delete myArray;
}
function resetmap(uint key) public {
delete myStruct.myMap[key];
}
}