草庐IT

Make_shared

全部标签

c++ - 你可以使用 boost::shared_ptr 作为 map 的键吗?

我可能需要重新考虑我的整体设计,但就目前而言,看起来我可能想做以下事情:classA;classB;std::map,B>APtrToBMap;我试过这个,它似乎在一个简单的情况下工作(编译器没有提示,简单的测试似乎工作)。但我对这种方法有了第二个想法。我怀疑其中有一些我不知道的问题。那么,以上内容在实际意义上有效吗?或者我这样做时是否有一些我不知道的缺陷? 最佳答案 引用有这样的说法:templatebooloperatorconst&a,shared_ptrconst&b);//neverthrows返回:一个未指定的值,使得o

c++ - 这种使用 std::make_unique 会导致非唯一指针吗?

假设我在C++中有以下代码:#include#includestructSome{Some(int_a):a(_a){}inta;};intmain(){Somesome(5);std::unique_ptrp1=std::make_unique(some);std::unique_ptrp2=std::make_unique(some);std::coutaa据我了解,唯一指针用于保证不共享资源。但在这种情况下,p1和p2都指向同一个实例some。请公布情况。 最佳答案 它们不指向相同的资源,它们各自指向不同的拷贝。可以通过删除拷

c++ - 我可以将 std::make_shared 与没有参数构造函数的结构一起使用吗?

假设我有一个像这样的struct:structS{inti;doubled;std::strings;};我可以这样做吗?std::make_shared(1,2.1,"Hello") 最佳答案 不,您不能,您必须定义自己的构造函数才能做到这一点。#include#include#includestructS{S(intii,doubledd):i(ii),d(dd){}inti;doubled;};intmain(){//Ss{1,2.1};autos=std::make_shared(1,2.1);//orwithoutcons

c++ - std::enable_shared_from_this;公共(public)与私有(private)

我使用shared_ptr和enable_shared_from_this玩了一会儿,但遇到了一些我不太了解的东西。在我的第一次尝试中,我构建了这样的东西:classshared_test:std::enable_shared_from_this{public:voidprint(boolrecursive){if(recursive){shared_from_this()->print(false);}std::cout请注意,这个类正在私下扩展std::enable_shared_from_this。这显然有很大的不同,因为执行这样的事情:intmain(){autot(std::

c++ - std::make_unique 导致大幅减速?

我最近开始使用C++14而不是C++11对我的C++代码库进行现代化改造。在用C++14中的std::make_unique替换一次出现的std::unique_ptr.reset(new...)后,我意识到我的测试套件(由大约30个C++测试程序组成)运行速度慢了大约50%。旧的C++11代码(快速):classFoo{public:Foo(size_tsize){array.reset(newchar[size]);}private:std::unique_ptrarray;};新的C++14代码(慢):classFoo{public:Foo(size_tsize){array=s

c++ - 井字游戏 AI : How to Make the Tree?

在制作井字游戏机器人时,我在试图理解“树”时遇到了很大的困难。我理解这个概念,但我不知道如何实现它们。有人可以向我展示一个如何为这种情况生成树的示例吗?还是生成树的好教程?我想困难的部分是生成部分树。我知道如何实现生成一整棵树,但不知道它的一部分。 最佳答案 想象一下,在井字游戏中的任何一点,每一个可能的Action都是一个分支。板的当前状态是根。一个Action是一个分支。现在假设(一次一个),每个分支都成为当前状态。每个可能的移动都成为一个新的分支。树的叶子是当最后一步完成并且棋盘已满时。你需要一棵树的原因是,一旦它建成,你需要

c++ - shared_ptr 的自定义删除器的附加参数

无论如何我可以向std::shared_ptr的删除器发送参数吗?感觉像:std::shared_ptrmyA(a,myDeleter(a,5));myDeleter有这个签名:voidmyDeleter(A*a,inti)(显然上面的语法是错误的,但只是为了强调我需要我的删除器来接受额外的参数。) 最佳答案 您可以在将删除器的第二个参数作为删除器传递之前std::bind:autodeleter=std::bind(myDeleter,std::placeholders::_1,5);std::shared_ptrmyA(a,de

c++ - 为什么这个makefile在 'make clean'上执行一个目标

这是我当前的makefile。CXX=g++CXXFLAGS=-Wall-O3LDFLAGS=TARGET=testcppSRCS=main.cppobject.cppfoo.cppOBJS=$(SRCS:.cpp=.o)DEPS=$(SRCS:.cpp=.d).PHONY:cleanallall:$(TARGET)$(TARGET):$(OBJS)$(CXX)$(CXXFLAGS)$(LDFLAGS)$(OBJS)-o$(TARGET).cpp.o:$(CXX)$(CXXFLAGS)-c$$@clean:rm-f$(OBJS)$(DEPS)$(TARGET)-include$(DEP

c++ - 如何使用weak_ptr打破shared_ptr循环引用

我读过weak_pointers可以用来打破循环引用。考虑下面的循环引用示例structA{boost::shared_ptrshrd_ptr;};boost::shared_ptrptr_A(boost::make_shared());boost::shared_ptrptr_b(boost::make_shared());ptr_A->shrd_ptr=ptr_b;ptr_b->shrd_ptr=ptr_A;以上是循环引用的例子,我想知道如何破解上面使用weak_ptr的循环引用?更新:根据收到的建议,我提出了以下建议:structA{boost::weak_ptrwk_ptr;}

c++ - 将 boost::shared_ptr 初始化为 NULL

我可以用NULL值初始化shared_ptr吗?boost::shared_ptrs_obj(NULL);如果没有,那怎么办? 最佳答案 默认构造会为您执行此操作:templateclassshared_ptr{public:explicitshared_ptr(T*p=0):px(p){//Snip}//...private:T*px;//containedpointercount_type*pn;//ptrtoreferencecounter}; 关于c++-将boost::shar