加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 依靠布尔值来访问指针

发布时间:2020-12-16 10:12:15 所属栏目:百科 来源:网络整理
导读:我有一个名为MyClass的类,它包含一个指向对象的指针,如下所示: class MyClass {public: MyClass() : _blob(nullptr) {} ~MyClass() { free(); } void generate() { if(!_blob) _blob = new Blob; } void free() { if(_blob) { delete _blob; _blob = nullpt
我有一个名为MyClass的类,它包含一个指向对象的指针,如下所示:

class MyClass {
public:
    MyClass() : _blob(nullptr) {}
    ~MyClass() { free(); }

    void generate() {
        if(!_blob)
            _blob = new Blob;
    }

    void free() {
        if(_blob) {
            delete _blob;
            _blob = nullptr;
        }
    }

    Blob* getBlob() { return _blob; }

private:
    Blob *_blob;
};

它保存指向堆分配对象的指针并且不在堆栈中包含它的原因是因为某些MyClass实例不为此对象分配数据,因此在访问它之前我需要检查它是否不是空指针:

if(myClass->getBlob())
    myClass->getBlob()->doSomething();

现在我有了这个想法来存储一个名为_hasBlob的bool变量,然后像这样使用它

if(myClass->hasBlob())
    myClass->getBlob()->doSomething();

这被认为是更快和合法吗?或者它被认为是不好的做法,因为我可以看到以某种方式结束取消引用nullptr的潜在危险.

解决方法

这是合法但多余的.它并不快.事实上,虽然检查本身一样快,但保持与指针有效性同步的布尔值稍微慢一些.关于它的最糟糕的事情是证明布尔值总是同步的维护负担.一旦它被实现并证明是正确的,它只是多余的并浪费内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读