Solidity delete 删除

本文详细探讨了Solidity编程语言中的`delete`关键字,它用于清除智能合约中的存储变量。通过实例代码`demo.sol`,展示了如何使用`delete`来释放合约内存,以及其在智能合约状态管理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

demo.sol(delete,删除):

pragma solidity ^0.4.21;


contract deleteTest {
    
    string public str1 = "hello";
    
    // delete操作符可以用于任何变量(mapping除外),将其设置成默认值。
    function delStr() public{
        delete str1;
    }
    
    function setStr() public {
        str1 = "HELLO";
    }
    
    ///
    
    // 静态数组(定长,不可修改),动态数组(不定长)。
    uint[10] public staticArray = [4,2,4,5,6,7,8];
    uint[] public dynamicArray = new uint[](10);
    
    function intDynamicArray () public {  // 初始化动态数组的值。
        for (uint i = 0; i< 10; i++) {
            //dynamicArray[i] = i;  // delete之后无法直接赋值(长度为0,下标越界)
            dynamicArray.push(i);  // 可以动态添加10个元素
        }
    }
    
    //如果对静态数组使用delete,则重置所有索引的值。
    function delStaticArray() public {
        delete staticArray;
    }
    
    //如果对动态数组使用delete,则删除所有元素,其长度变为0
    function delDynamicArray() public {
        delete dynamicArray;
    }
    
    function getArrayLength() view public returns (uint, uint){
        return (staticArray.length, dynamicArray.length);
    }
    
    /
    
    mapping(uint => bool) public map1;
    
    function initMap() public {
        map1[1] = true;   // 删除该key后,会变成默认值false
        map1[2] = true;
        map1[3] = false;
        
        // delete map1;  // delete运算符不能作用于map类型。 可以作用于map的键。
    }
    
    function deleteMapByKey(uint key) public {
        delete map1[key];
    }
    
    /
    
    struct Person {
        string name;
        mapping(string => uint) nameScore;  // 结构体中的map类型。
    }
    
    Person public p1;
    
    function initP1() public {
        p1.name = "duke";
        p1.nameScore["duke"] = 80;
    }
    
    function returnP1() view public returns (string, uint) {
        return (p1.name, p1.nameScore["duke"]);
    }
    
    function deleteP1() public {
        delete p1;  // 会删除结构体中的string,但不会删除结构体中的map
    }
    
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值