百科问答小站 logo
百科问答小站 font logo



C++动态二维数组如何使用智能指针? 第1页

  

user avatar   liu-ji-27-94 网友的相关建议: 
      

自问自答一波,刚刚貌似发现了解决方法:使用unique_ptr就可以了:

       int cols = 3, rows = 3; auto tmp_2 = vector<unique_ptr<Element []>>(rows); for (size_t i = 0; i < rows; ++ i) {     tmp_2[i] = move(unique_ptr<Element[]>(new Element[cols])); }      

想要修改元素内容的时候可以直接取地址:

       auto x = &tmp_2[1][2];      

然后修改内容即可:

       x->a.push_back(123);      

但是仍然不明白题目中描述的指针二次释放是怎么产生的,请各位大佬不吝赐教!

这个问题来自最近的编译器开发,为了描述清晰,进行了一定的简化。在LL1语法分析构建LL1分析表的时候,需要创建一个行数为栈顶符总数,列数为当前符总数的二维表,表格内每个元素定义如下:

       struct Analyze_table_item{     std::vector<std::string> stack_op; // 对分析栈的操作,文法符号的向量,将来逆序压入栈中     char read_op {};                   // 对输入流的控制,'N'表示读下一个token,'P'表示不读 }; // 分析表中的每一项元素      

然后需要定义一个get_op函数,能够返回某个位置的元素的指针,以进行读写:

       Analyze_table_item * get_op(const std::string& stack_top, const std::string& current);      

当然这个场景下讨论这个问题有点儿无聊,因为规范的写法应该定义一个get_op和一个set_op分别进行读和写,就避免了指针的传递。我当时在set_op函数里调用get_op可能只是为了节省代码吧,现在当事人很后悔 ...




  

相关话题

  libc 和 libstdc++ 一定是 backward compatible 的吗? 
  有什么高质量的现代 C++ 风格的开源代码? 
  你能否在不传递指针的情况下通过函数交换两个变量的值,如果可以请说明方法,如果不行请分析原因。?计算机? 
  C++可否将父类的对象cast子类,并调用子类的private函数? 
  如果编程语言有性别?Java、C++、C、C#是男是女?是GAY还是LES? 
  为了软件更符合开源风格,c/cpp 代码缩进应该使用4空格还是2空格? 
  怎么在 Windows 7 下用 C++,不兼容啊? 
  能否用外行也能懂的语言解释为什么C++很「危险」? 
  为什么标准库的map要insert(pair(key,value))而不是insert(key,value)? 
  在不使用奇淫怪技的情况下, 如何写出比 STL 快的 vector? 

前一个讨论
您认为博士期间最重要的事情是什么?
下一个讨论
读完博士不搞学术是不是很可惜?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利