为指针赋值
assigning values to pointers
如果一个有一个指向对象的指针数组,那么在下面的代码段中,哪种填充数组的方式更干净,(1)或(2)?是
string ** list = new string*[5];
string* s = new string("foo");
*list[0] = *s; //(1)
list[0] = s; //(2)
第一种方法将导致未定义的行为。 list[0]
不指向有效的 string
对象,因此取消引用它并分配给它将是不好的。
第二种方法对我来说看起来不错(从某种意义上说,它不会有未定义的行为),但我想这取决于你如何继续使用它。
很难说没有看到程序的其余部分,但这两种情况似乎都是错误的。如果您正在寻找"干净",请尝试以下任一方法:
string * list = new string[5];
list[0] = "foo";
或
vector<string> list(5);
list[0] = "foo";
这两个(主观上)都比你的任何一个干净。
(1) 是一个错误,因为 list[0] 最初是 NULL,所以你有效地编写了
*NULL = *s;
你应该写
list[0] = new string;
*list[0] = *s;
或者只是
list[0] = new string(*s);
(2) 不是错误,但 *(list[0]) 只有在 *s 存在时才会存在。 如果你改变*s,那么*(list[0])也会改变。 您还应该删除 s 或 list[0],但不能同时删除两者。 除非你真的需要这种行为,否则(2)是丑陋的。
一般来说,我不明白你为什么在这里需要指针。 因此
string* list = new string[5];
会干净得多,并且
vector<string> list(5);
会更好。
最后,将某些东西称为"列表"不是一个好主意,因为有一个具有此名称的标准容器。 (既不称任何内容为"矢量"、"集合"、"字符串"、"堆栈"或"映射")。
相关文章:
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 关于 c++ 函数中指针赋值的简单问题
- VkSurfaceKHR 指针的值在函数调用后更改,无需任何显式赋值
- 在 Arduino 中为 2D 指针数组赋值
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 为什么通过指针赋值常量没有效果?
- 通过 lambda 在空指针处赋值
- 指针到指针算术:赋值
- 复制构造函数中的指针赋值
- 如何将值从指针永久赋值到变量
- 通过智能指针向类成员进行赋值
- 为什么在取消引用的指向接口的指针上使用赋值运算符不是编译器错误
- 将函数赋值给函数指针,常量参数正确性
- 为指针指向的地址赋值?C++
- C++ 包含唯一指针成员变量的类的赋值运算符
- 在类数据成员中赋值指针
- 有没有一种方法可以自动地赋值指针并增加计数器,而不需要锁?
- 赋值指针数组
- 如何在c++中赋值指针给this