草庐IT

gnu-make

全部标签

c++ - C++ 中的 "As a rule of thumb, make all your methods virtual"- 合理的建议?

我只是偶然看到了标题中的陈述。完整的报价是:Asaruleofthumb,makeallyourmethodsvirtual(includingthedestructor,butnotconstructors)toavoidproblemsassociatedwithomissionofthevirtualkeyword.我在Wrox的书ProfessionalC++中找到了这个。Youcangoogleittocheck.这有什么关系吗?我原以为您只会提供选择的扩展点,而不是默认的可扩展性。例如,a2001articlebyHerbSuttersaysso.从那以后,有什么发生了巨大

c++ - 为什么 boost 没有 make_scoped()?

Boost的make_shared()函数promise在尝试创建shared_ptr时是异常安全的.为什么没有make_scoped()相等的?是否有通用的最佳做法?这是来自boost::scoped_ptrdocumentation的代码示例这对我来说似乎不安全:boost::scoped_ptrx(newShoe);这行代码会依次完成这三件事:为Shoe分配堆内存调用Shoe的构造函数调用boost::scoped_ptr的构造函数如果Shoe的构造函数抛出异常,内存将被泄露。(参见R.MartinhoFernandes的回答)scoped_ptr不会处理释放,因为它还没有被构造

c++ - 如何make_shared派生类?

我想使用make_shared带有派生类的函数,如下所示classBase{public:typedefstd::shared_ptrPtr;};classDerived:publicBase{};Base::PtrmyPtr=std::make_shared(/*Derived()*/);我如何告诉make_shared构建这样一个对象?我想避开经典Base::Ptrptr=Base::Ptr(newDerived());利用make_shared函数中的单个alloc。 最佳答案 std::shared_ptr有一个可以生成sh

c++ - 如何在 gnu/linux 上安装 boost

有这么多的教程,但没有什么能说明如何正确安装这个库。我想将它安装在默认的gnu/linux库目录中。我试过了:$sudo./bootstrap.sh$./b2install现在它安装在哪里?安装了吗?运行./b2install后,我得到以下输出:z@z-comptuer:~/Desktop/.mess/boost_1_55_0/tools/build/v2$sudo./b2installwarning:Notoolsetsareconfigured.warning:Configuringdefaulttoolset"gcc".warning:Ifthedefaultiswrong,yo

c++ - make_unique数组,原始提案与最终提案

StephanTLavavej最初对make_unique的建议是N3588它包括以下功能:make_unique(args...)make_unique_default_init()make_unique(n)make_unique_default_init(n)make_unique_value_init(n,args...)make_unique_auto_size(args...)但是,最后的提案N3656仅包含make_unique(两种形式)。我找不到有关该函数其他形式的任何讨论。我读了theminutesoftheBristolmeeting,但他们甚至都没有引用原始建议

c++ - std::make_shared 与 std::initializer_list

#include#includeclassBase{public:Base(){}};classDerived:publicBase{public:Derived(){}Derived(std::initializer_list>>){}};intmain(intargc,char**argv){autoexample=newDerived({{0,std::make_shared()}});return0;}它正常工作(livepreview),但是当我尝试使用std::make_shared和std::initializer_list作为参数时,我得到了错误:autoexample

c++ - GNU C++ 中的原子交换

我想验证我的理解是否正确。这种事情很棘手,所以我几乎可以肯定我错过了一些东西。我有一个由实时线程和非实时线程组成的程序。我希望非RT线程能够交换指向RT线程使用的内存的指针。从文档中,我的理解是这可以在g++中完成://globalData*rt_data;Data*swap_data(Data*new_data){#ifdef__GNUC__//Atomicpointerswap.Data*old_d=__sync_lock_test_and_set(&rt_data,new_data);#else//Non-atomic,crossyourfingers.Data*old_d=rt

c++ - std::weak_ptrs 是否会影响 std::make_shared 分配的内存何时被释放?

如果我调用std::make_shared(而不仅仅是显式分配shared_ptr)那么出于性能原因,我希望引用计数与T的实例一起分配在内存中。一切顺利。但如果我有weak_ptr引用同一个对象的实例,大概他们需要访问该引用计数,以了解该对象是否仍然存在。因此,当T的实例的最后一个shared_ptr被销毁时,对系统的幼稚理解会暗示它无法释放存储T的内存,因为weak_ptrs仍然需要访问该计数。好像有一个separateweakreferencecounter从理论上讲,它可以与T的实例分开保存,以便可以在弱引用仍然存在的情况下销毁T并释放内存。但随后我们又回到了2个单独的分配,从而

c++ - C++1z 中 std::make_pair 和 std::make_tuple 的用处

据我了解,std::make_pair存在的唯一原因和std::make_tuple是您不必自己编写类型,因为它们是自动推导出来的。在C++1z中,我们有templateargumentdeductionforclasstemplates,这让我们可以简单地写std::pairp(1,2.5);//C++1z而不是autop=std::make_pair(1,2.5);//C++11/14std::tuple的情况是类似的。这导致了以下问题:在C++1z中,是否存在使用std::make_pair和std::make_tuple而不是使用的情况std::pair和std::tuple的

c++ - 避免使用 git 和 make 重新编译

我在git中有两个开发分支,我经常需要在两者之间进行切换。然而,真正令人沮丧的是,每次我在git中更改分支时,整个项目都会重新构建,因为某些文件的文件系统时间戳会发生变化。Ofc,makefile被配置为将项目构建到两个不同的构建目录中。有没有办法解决这个问题?编译是一个非常漫长和耗时的过程……编辑:-这是对该问题的更详细的解释...假设我有一个头文件Basic.h,它包含在许多其他文件中。分支1和分支2的Basic.h不同。现在假设我已将分支1编译为build_branch1,将分支2编译为build_branch2。假设我目前已checkout分支2。现在我checkout分支1并