相关疑难解决方法(0)

我什么时候使用哪种指针?

好吧,所以我最后一次以C++为生,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.

那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*)和其他增强智能指针的建议.(像这样的东西会很棒).

c++ pointers smart-pointers c++-faq c++11

224
推荐指数
4
解决办法
3万
查看次数

如何将自定义删除器与std :: unique_ptr成员一起使用?

我有一个带有unique_ptr成员的类.

class Foo {
private:
    std::unique_ptr<Bar> bar;
    ...
};
Run Code Online (Sandbox Code Playgroud)

Bar是第三方类,具有create()函数和destroy()函数.

如果我想std::unique_ptr在独立功能中使用它,我可以这样做:

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
    ...
}
Run Code Online (Sandbox Code Playgroud)

std::unique_ptr作为班级成员,有没有办法做到这一点?

c++ unique-ptr move-semantics c++11

122
推荐指数
7
解决办法
9万
查看次数

那么,std :: unique_ptr的自定义删除工作如何工作?

根据N3290 std::unique_ptr在其构造函数中接受一个删除参数.

但是,我不能在Windows中使用Visual C++ 10.0或MinGW g ++ 4.4.1,也不能在Ubuntu中使用g ++ 4.6.1.

因此,我担心我对它的理解是不完整或错误的,我不能看到显然被忽略的删除论证的观点,那么任何人都可以提供一个有效的例子吗?

我最好还想看看它是如何工作的unique_ptr<Base> p = unique_ptr<Derived>( new Derived ).

可能会使用标准中的一些措辞来备份示例,即使用您正在使用的任何编译器,它实际上做了它应该做的事情?

c++ unique-ptr delete-operator c++11

55
推荐指数
4
解决办法
4万
查看次数

并发环境中的C++ 11 std :: vector

我有一个问题(segfault)在C++ 11中运行多线程代码.这是代码:

#include <vector>
#include <thread>

std::vector<int> values;
int i;

void values_push_back()
{
    values.push_back(i);
}

int main()
{
    while(true)
    {
        std::vector<std::thread> threads;

        for(i=0; i<10; ++i)
        {
            std::thread t(values_push_back);
            threads.push_back(std::move(t));
        }
        for(i=0; i<10; ++i)
            threads[i].join();
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里是gdb上的回溯:http://pastebin.com/5b5TN70c

这有什么不对?

c++ concurrency multithreading segmentation-fault c++11

9
推荐指数
1
解决办法
9595
查看次数

处理std :: thread :: hardware_concurrency()

在我的问题有关std::thread,我建议使用std::thread::hardware_concurrency().我读到了某个地方(我找不到它,看起来像是一个本地的代码存储库),这个功能没有在4.8之前的g ++版本中实现.

事实上,我和这个用户处于同一个受害者的位置.该函数将返回0.我在答案中找到了一个用户实现.欢迎评论这个答案是否合适!

所以我想在我的代码中执行此操作:

unsinged int cores_n;
#if g++ version < 4.8
 cores_n = my_hardware_concurrency();
#else
 cores_n = std::thread::hardware_concurrency();
#endif
Run Code Online (Sandbox Code Playgroud)

但是,我可以找到实现这一结果的方法.我该怎么办?

c++ multithreading g++ version c++11

2
推荐指数
1
解决办法
6504
查看次数