jjzjj

java - C++ 指针指向 Java 中的指针

我是Java菜鸟。我已经能够掌握将C/C++指针转换为Java引用的概念,而且进展相当顺利。我点击了一段代码,其中包含指向指针的指针(即**ptr)。我需要取消引用指针并更改它指向的指针的值(即*ptr=&newthing;)这在Java中似乎更难。有没有人对如何解决这个问题有任何想法?快速谷歌搜索一无所获。这是C++中的代码示例。我想在Java中得到类似的东西,但是ptr_to_ptr变量是个问题:struct_coord{intx;inty;_coord*next_coordinate;}coordinate_t;coordinate_tbuffer[100];coordinate

c++ - C/C++ 指针,ptr+1 = ptr +1 byte 还是 ptr+1*sizeof(pointer_type)?

有any_type*ptr=(any_type*)malloc(sizeof(any_type)*size);my_ptr=ptr+1;memcpy(dst,my_ptr,sizeof(any_type));my_ptr会指向ptr之后的1个字节,还是指向ptr之后的sizeof(any_type)字节?对齐选项如何影响答案?有符号/无符号类型是否不同? 最佳答案 指针运算是在指针的静态类型[*]的大小上进行的,所以它会有效地添加sizeof*ptr。成员的对齐方式将作为类型的对齐方式(对象末尾的填充)考虑到对象的大小。struct

c++ - auto_ptr 内容的三元运算符不起作用

我将auto_ptr初始化为NULL,稍后在游戏中我需要知道它是否为NULL以返回它或一个新拷贝。我试过了auto_ptrret=(mReqContext.get()!=0)?mReqContext:newRequestContext();还有其他几个类似的东西转换等等,但是g++试图调用auto_ptrs不存在的运算符?(三元运算符)而不是使用RequestContext*进行三元比较。即使我施放它也不起作用。有什么提示吗?编辑不相等的相等 最佳答案 我想情况类似于以下情况:#include#includeintmain(){st

c++ - 为什么int** ptr在访问ptr[i][j]时不指向与int arr[3][3]相同的地址?

我正在回答这个question但是当我测试下面的代码时我很困惑。#includeusingnamespacestd;intmain(){int**ptr;intarr[3][3];ptr=(int**)arr;for(inti=0;i但是我得到了这个输出:0x7fff5700279c=?00x7fff570027a0=?0x40x7fff570027a4=?0x80x7fff570027a8=?00x7fff570027ac=?0x40x7fff570027b0=?0x80x7fff570027b4=?00x7fff570027b8=?0x40x7fff570027bc=?0x8为什么

c++ - C++ 中的内存泄漏。编程风格

对于小程序,我们可以通过这样的方式防止内存泄漏:proc(){//allocatememoryformatrixtry{}catch{//freematrixmemory}...//freematrixmemory}如果我们的程序更复杂:proc(){//allocatememoryformatrixtry{}catch{//freematrixmemory}...try{}catch{//freematrixmemory}...try{}catch{//freematrixmemory}...//freematrixmemory}看起来有些笨拙。是否存在更好的方法、更好的内存泄漏控制

c++ - shared_ptr 与指针共存

我有一个函数如下voida(shared_ptrval){...}有时候,我想传入一个堆分配的对象shared_ptrv(newX());a(v);其他时候,我想传入一个堆栈分配的对象classC{//doesn'tworkproperlyb/cwhentheshared_ptrdiesitwilltrytodeletex...C(){a(shared_ptr(&x));}Xx;};让函数接受智能指针,同时让智能指针引用堆栈分配对象的最佳方法是什么?或者我应该走Java路线并从堆中分配所有内容? 最佳答案 我只想让函数采用这样的模板

c++ - 在 boost::ptr_unordered_map 中存储指向 const 对象的指针

我似乎做不到boost::ptr_unordered_map工作-底层实现看起来像是将东西转换为void*.我是否只需要硬着头皮让我的方法包装对此的访问做一个const_cast插入项目时,或者我在这里遗漏了什么?有什么方法可以存储指向const对象的指针(constFoo*)? 最佳答案 看起来这是不可能的。解决方法是包装对ptr_unordered_map的访问.插入方法应该采用constauto_ptr然后执行const_cast插入它。如果您在删除元素时将auto_type交还给客户端代码,则需要从中解压指针并将其传输到co

c++ - Ptr-to-member 模板参数的 Friend 语法

好吧,所以我认为这是一个纯粹的C++语法问题。我有一个用ptr-to-member作为其模板参数之一定义的类:templateclassMy_list{我有另一个简单的类,它是这个类的友元。通常,我会写:classMy_friend_class{templatefriendclassMy_list;};...但是,因为第二个模板参数不是那么自由...我该如何表达友元?谢谢! 最佳答案 也许更好的问题是“为什么?”而不是“如何?”您到底想达到什么目的?当您的C++代码变得复杂和丑陋时,这通常是一个警告,表明您正在错误地处理问题。

c++ - 指针 - 将 ptr 传递给 ptr 或传递 ptr 的地址

我正在尝试使用两种方法删除示例二叉搜索树的左子节点(10):方法1:通过将指针传递给指向当前节点的指针。方法2:通过将指针的地址传递给当前节点。这不会删除节点,但调用delete会破坏指针排列,导致打印节点时发生崩溃。树看起来像这样,我正在尝试删除10并用5替换它20|10--|---30|5---|我对指针有一些了解。但是,我仍然不清楚指针的这种行为。#includeclassNode{public:Node(intkey):leftChild(0),rightChild(0),m_key(key){}~Node(){}Node*leftChild;Node*rightChild;i

c++ - 从源代码编译后未安装 boost ptr_container 库

我已经将boost库从以前的1.54(svn源)更新到1.57(git源)。尽管我使用了相同的./b2参数,但目标目录不包含ptr_container库。具有克隆存储库的目录在此路径上正确包含ptr_container库:boost_git/libs/ptr_container我正在使用以下命令构建它:./b2--install--prefix=$SHL_PATH/boost-sNO_BZIP2=1-sNO_ZLIBruntime-link=sharedlink=shared-j2install但没有成功。编辑:似乎只有从git构建时才会出现问题。当我从boost站点下载zip包时,目