【问题标题】:NULL return value of type QList<float*>QList<float*> 类型的 NULL 返回值
【发布时间】:2013-12-19 08:00:21
【问题描述】:

我想为返回 QList 的方法返回默认 Null 值(如果处理失败,我想返回)。

如何正确构建 Null QList

【问题讨论】:

  • QList *list = null;
  • @Blood:这是一个指针,而不是 QList 值。当您不想返回“null”时,您还需要以某种方式创建一个指向的值。
  • @Blood, what's null?
  • 如果处理失败,我猜你还想返回一条错误消息。 => 抛出异常

标签: c++ qt null default qlist


【解决方案1】:

一般来说,对于非指针类型,没有“空值”之类的东西。选项包括:

  • 失败时抛出异常
  • 返回一个空列表,如果它永远不会是一个有效的结果
  • 返回一个可以为空的包装类型,如boost::optional&lt;QList&gt;std::pair&lt;bool, QList&gt;

【讨论】:

    【解决方案2】:

    返回一个指向 QList 的指针,然后测试它是否为空指针,我认为这就是你要问的,如果我误解了抱歉

    void someClass::test()
    {
        std::shared_ptr<QList<float> > testList = doSomething()
        if(testList == nulllptr)
        {
            // Then its null
        }
        else
        {
           // Do whatever you want with it
        }
    }
    
    std::shared_ptr<QList<float>> someClass::doSomething()
    {
        std::shared_ptr<QList<float>> someList; // = NULL at the moment 
    
        if(weWantValues) // Lets just pretend this bool knows if we want values 
        {
            someList = std::make_shared<QList<float>(); // now a shared pointer to a list
            // Populate with whatever values you want. use ".get()" or "->" to access list
        }
    
        // this may be null or populated so check if it == nullptr before using
        // Like we do in the function above
        return someList;
    }
    

    【讨论】:

    • 那么当你不想返回nullptr时应该指向什么?一个动态分配的列表,调用者必须记得删除它?还是一个静态列表,可能会被随后的函数调用意外修改?还是别的什么?
    • 你去告诉我这是否更清楚地说如果没有:)
    • 所以现在你最好记录调用者负责删除,并修复内存泄漏。或者返回一个智能指针。在 C++ 中动态分配并不是一件容易的事。 (此外,您需要将指针显式初始化为 null,否则它将具有垃圾值)。
    • 更好?,现在正在使用智能指针(共享指针)来处理自己的删除,我说得对吗?
    • 也@mikeSeymour 我知道boost::optional 可能是这里最好的东西,但我试图提供一个免费的图书馆替代方案
    【解决方案3】:

    你可以用return {}代替nullptr,像这样:

    QList<QObject *> getModel(int id)
    {
        if (id < 0)
            return {};
    
        return m_myModel->model();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2019-06-21
      • 1970-01-01
      • 2022-01-14
      • 2021-07-02
      • 2017-04-22
      • 1970-01-01
      • 2021-10-03
      • 2016-05-11
      相关资源
      最近更新 更多