相关疑难解决方法(0)

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

C++中make_shared和普通shared_ptr的区别

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
Run Code Online (Sandbox Code Playgroud)

许多google和stackoverflow帖子就在这里,但我无法理解为什么make_shared比直接使用更有效shared_ptr.

有人可以一步一步解释我创建的对象序列和两者所做的操作,这样我就能理解make_shared效率如何.我在上面给出了一个例子供参考.

c++ shared-ptr c++11

252
推荐指数
5
解决办法
9万
查看次数

在新运算符上使用std :: make_unique的优点

什么是使用的优势,std::make_uniquenew运营商的初始化std::unique_ptr

换句话说,为什么

std::unique_ptr<SomeObject> a = std::make_unique(SomeObject(...))
Run Code Online (Sandbox Code Playgroud)

比做好

std::unique_ptr<SomeObject> a = new SomeObject(...)
Run Code Online (Sandbox Code Playgroud)

我尝试在线查看很多,我知道new在现代C++中避免使用操作符是一个很好的经验法则,但我不确定在这个确切的场景中有什么优势.它是否可以防止可能发生的任何类型的内存泄漏?做一个std::make_unique比使用更快new吗?

c++ unique-ptr c++14

95
推荐指数
2
解决办法
6万
查看次数

C++ std :: tuple破坏顺序

有一条规则说明std :: tuple的成员被破坏了吗?

例如,如果Function1返回一个std::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>>to Function2,那么我可以确定(当Function2剩下的范围时)ClassB第二个成员ClassA引用的实例在第一个成员引用的实例之前被销毁吗?

std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1()
{
    std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage;
    get<0>(garbage).reset( /* ... */ );
    get<1>(garbage).reset( /* ... */ );
    return garbage;
}

void Function2()
{
    auto to_be_destroyed = Function1();
    // ... do something else

    // to_be_destroyed leaves scope
    // Is the instance of ClassB destroyed before the instance of ClassA?
}
Run Code Online (Sandbox Code Playgroud)

c++ std c++11 stdtuple

46
推荐指数
3
解决办法
2752
查看次数