草庐IT

weak_ptr_cast

全部标签

从 int* 到 void* 到 char* 的 C++ static_cast - 你能帮我理解这段代码吗?

我是C++的初学者,我在理解某些代码时遇到了问题。我有一个练习要做,编写返回int大小的函数,并且不使用sizeof()和reinterpret_cast。有人给了我解决方案,但我不明白它是如何工作的。你能帮我理解吗?这是代码:intintSize(){intintArray[10];int*intPtr1;int*intPtr2;intPtr1=&intArray[1];intPtr2=&intArray[2];//Whycastintpointertovoidpointer?void*voidPtr1=static_cast(intPtr1);//whycastvoidpointe

c++ - 将任何数据类型序列化为 vector<uint8_t> - 使用 reinterpret_cast?

我没有在搜索中找到任何直接相关的内容,所以如果这是重复的,请原谅。我要做的是通过网络连接序列化数据。我的方法是将我需要传输的所有内容转换为std::vector并在接收方将数据解压缩到适当的变量中。我的方法是这样的:templateinlinevoidpack(std::vector&dst,T&data){uint8_t*src=static_cast(static_cast(&data));dst.insert(dst.end(),src,src+sizeof(T));}templateinlinevoidunpack(vector&src,intindex,T&data){cop

c++ - 不需要大量库的体面的 shared_ptr 实现?

我现在正在上GIS编程的C++编程类(class)。我真的开始为处理适当的内存管理而头疼。考虑到任何时候通常有8-10个类,每个类都包含一个指向3D矩阵或其他非常大的东西的指针。现在我们的类(class)已经提出了允许我们使用Boost的教授的问题,或者至少是2008年的C++功能包(对于TR1)。他拒绝了,但说如果我们愿意,我们可以找到添加一些第三方cpp/hpp文件。我已经尝试过让shared_ptr脱离boost,但这比它的值(value)更让人头疼。那么那里有任何免费的shared_ptr实现吗? 最佳答案 使用boost的

c++ - 我可以为局部变量创建一个 boost::shared_ptr 吗?

我有一些方法采用对给定对象的引用,有些采用boost::shared_ptr。到目前为止,在我的测试方法中,我创建了一个指向这些对象之一的shared_ptr并将*ptr传递给需要引用的方法。是否可以反过来做,例如在堆栈上创建一个本地对象,然后以安全的方式创建一个指向它的共享指针,以直接替代使用传统指针的&obj运算符? 最佳答案 如果您发现需要这个,那么您的代码可能存在严重错误。如果函数采用共享指针,那应该是因为它们需要延长对象的生命周期。如果他们不需要延长对象的生命周期,他们应该引用。对于您正在做的事情,它们不能延长对象的生命周

c++ - 如何填充unique_ptr数组?

是否可以使用std:fill来填充unique_ptr数组?目的是让不同的指针指向使用相同参数初始化的不同对象。例如:std::unique_ptrar[3];std::fill(ar.begin(),ar.end(),make_unique_for_each_element_somehow(1)); 最佳答案 不,但这就是std::generate是为了。std::generate不是被赋予一个在整个目标范围内复制的单个值,而是被赋予一个“生成器”函数,该函数根据需要创建每个值。所以,大概是这样的:std::unique_ptra

c++ - 应该一直使用 boost::ptr_vector 代替 std::vector 吗?

这只是我一直遇到的概念性问题。在我当前的项目中,感觉我过度使用了boostsmart_ptr和ptr_container图书馆。我正在创建boost::ptr_vectors在许多不同的对象中调用transfer()方法从一个boost::ptr_vector中移动某些指针给另一个。据我所知,清楚地显示堆分配对象的所有权很重要。我的问题是,是否需要使用这些boost库来创建属于某个对象的堆分配成员,然后通过get()使用指向这些成员的普通指针?在进行任何处理时。例如……一个游戏可能有一组属于它的Tiles。在boost::ptr_vector中创建这些图block可能有意义.当游戏结束

c++ - 是否可以重载 *static_cast* 运算符?

我已经定义了一个类A,实际的属性是无关紧要的。是否可以定义static_cast(int)的特化运算符从整数转换为A类?到目前为止,我一直通过定义一个convert函数来做到这一点,例如Aconvert(int).但我宁愿使用static_cast为了与其他转换保持一致。这可能吗?我还想避免隐式转换,这就是我不通过A的构造函数执行此操作的原因。 最佳答案 static_cast是一个关键字,因此您无法在那里重载或覆盖任何内容。如果您想提供控制整数如何转换为A类实例的代码,请编写A::A(int)形式的适当构造函数。更新:如果你想避免

c++ - 为什么 int* ptr_arr_int = {1,2};在 C/C++ 中不起作用?

为什么int*ptr_arr_int={1,2};给出编译器错误,而char*ptr_arr_char="amruth";编译正常?int*ptr_arr_int={1,2};//->ERRORchar*ptr_arr_char="amruth";//->OK 最佳答案 "amruth"在C++中是一个constchar[7]类型,在C中是一个char[7]类型(尽管尝试修改字符串的行为未定义)。在某些情况下,这可以退化为constchar*或char*类型,例如您的情况。尽管int[2]在某些情况下会类似地衰减为int*,但{1,

c++ - 为什么 std::unique_ptr operator* 抛出而 operator-> 不抛出?

在C++标准草案(N3485)中,它声明如下:20.7.1.2.4unique_ptr观察者[unique.ptr.single.observers]typenameadd_lvalue_reference::typeoperator*()const;1Requires:get()!=nullptr.2Returns:*get().pointeroperator->()constnoexcept;3Requires:get()!=nullptr.4Returns:get().5Note:usetypicallyrequiresthatTbeacompletetype.你可以看到oper

c++ - 提升 Python 和 shared_ptr 的 vector

我已经阅读了如何在boostpython中向python公开法vector,但我想知道如何公开和使用vector。例如,我有一个shared_ptrvector,如下所示:std::vector>Effects;根据暴露vector的资料,我应该可以暴露这种类。我想知道的是我怎样才能真正添加​​到它?如何创建shared_ptr的实例因为我无权访问new,而且shared_ptr可以指向多个派生类型,这使得向每个类添加静态创建方法有点乏味。有没有人有一些指示或可以建议如何做到这一点?为我想做的事情找到boost::python的好例子有点棘手提前致谢 最佳答