C++ 中文周刊 第90期

周刊项目地址

公众号

欢迎投稿,推荐或自荐文章/软件/资源等

可以贴在下一期草稿里 草稿链接


资讯

编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-11-23 第177期

文章

看个乐

了解一波

class Derived : Base
{
    void DoSomething()
    {
        auto p1 = std::make_unique<BaseAcceptor>(static_cast<Base*>(this));
        auto p2 = std::make_shared<BaseAcceptor>(static_cast<Base*>(this));

        std::vector<BaseAcceptor> v;
        v.emplace_back(static_cast<Base*>(this));
    }
};

忘记打public 继承,多了一堆static_cast

qt一些使用QNetworkAccessManager的细节

记得删除reply

QNetworkReply *reply = ...
connect(reply, &QNetworkReply::finished, this, [reply]()) {
    reply->deleteLater();
    //...
});

使用https,不多说

QNetworkAccessManager不要一个请求创建一个

重定向

qt5是关的,需要设置一下,qt6是默认设置好了的

auto nam = new QNetworkAccessManager(this);
nam->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);

HSTS

这个我不懂

auto nam = new QNetworkAccessManager(this);
nam->setStrictTransportSecurityEnabled(true);
nam->enableStrictTransportSecurityStore(true, QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/hsts/"));

SSL错误处理

QNetworkReply *reply = ...
connect(reply, &QNetworkReply::sslErrors, this, [reply](const QList<QSslError> &errors) {
    KSslErrorUiData errorData(reply, errors);
    if (KIO::SslUi::askIgnoreSslErrors(errorData)) {
        reply->ignoreSslErrors();
    }
});

Disk cache

auto nam = new QNetworkAccessManager(this);
auto diskCache = new QNetworkDiskCache(nam);
diskCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/http/"));
nam->setCache(diskCache);

省流:别用

省流:犄角旮旯语法教学,别看

c++20 SSO优化的短字符串string是能查到长度的,gcc/msvc是15个,clang是23个,当然如果string_view任何长度都可以查长度

书评。这本书讲的不错,列一段代码

Logger& getLogger() {
  // Even if two threads call getLogger() simultaneously,
  // local will be constructed only once.
  static Logger local("log.txt");
  return local;
}

struct FileManager {
  FileManager()
  {
    getLogger() << "Starting up file manager…";
    // …
  }

  ~FileManager()
  {
    getLogger() << "Shutting down file manager…";
    // …
  }
};

FileManager& getFileManager() {
  // Global fileManager, initialized on the first call
  // to getFileManager().
  static FileManager fileManager;
  return fileManager;
}

这两个是很常规的代码,但组合到一起,就有了问题,析构!如果Logger先于FileManager析构,FileManager的析构用到了已经析构的Logger,崩溃

这种通常是在程序退出的时候莫名其妙多个core。如何合理的解决这个问题?加锁?

auto counter = [j=0]() mutable -> decltype(j) {
    return j++;
};

auto lm = [][[nodiscard]]()->int { return 42; };

比较c++ 和rust的move,c++的move确实有点高深,不清晰

iOS 16 / macOS 13 支持的新特性,走读一波c api。感兴趣的可以看看

视频

一个无锁hashtable

代码

https://github.com/tempesta-tech/blog/tree/master/htrie

https://github.com/tempesta-tech/tempesta/blob/master/db

卖APU的

容器的各种性能指标。不用看

没啥意思,可以不看

图片

感觉演讲者都绷不住了

开源项目需要人手

新项目介绍/版本更新

T_T

本文永久链接

看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持! 觉得写的不错那就给点吧, 在线乞讨 微信转账