草庐IT

c++ - Visual Studio 用户使用 GCC/make 的介绍

我使用VisualStudio2010用C++开发了一个工具,我也想在Linux系统上部署它。代码本身的编程完全独立于平台,仅使用STL和标准库。现在我的问题是:我没有使用Linux的经验。然而,我尝试让我编写的一些其他程序使用GCC进行编译,结果是一大堆错误向我抛出,我花了3个小时才解决-太可怕了!从这次经历中注意到,如果我尝试将当前项目移植到GCC,我认为同样的情况即将发生,而且情况会更糟。我的问题是:VisualStudio用户需要知道什么才能成功让他们的程序在Linux上运行?(我需要学习make吗?)您是否知道一个很好的资源,它不涵盖整个GCC/Linux编程的主题,而是专门

c++ - 表达式 : auto p {make_pointer()}; 的不同编译器行为

以下程序的正确行为是什么?//example.cpp#include#includestructFoo{voidBar()const{std::coutMakeFoo(){returnstd::make_shared();}intmain(){autop{MakeFoo()};p->Bar();}当我在我的LinuxRHEL6.6工作站中编译它时,我得到以下结果:$g++-vgccversion5.1.0(GCC)$g++example.cpp-std=c++14-Wall-Wextra-pedantic$./a.outFoo::Bar()但是$clang++-vclangversio

c++ - 构造对象时有什么理由不使用 std::make_shared 吗?

我想不出任何情况std::shared_ptrobj(newObject("foo",1));会更喜欢autoobj=std::make_shared("foo",1);后者总是会产生更好的局部性并减少内存碎片。除了与返回原始指针的代码接口(interface)之外,是否有任何情况下您更愿意(或被迫)使用第一种形式? 最佳答案 Thelatteralwaysresultsinbetterlocalityandreducesmemoryfragmentation.不总是。鼓励实现对引用计数的对象和引用计数使用单个分配,但这不是必需这样

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++ - 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++ - 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的