C++ 如何使用指向常量值的常量指针成员正确初始化结构?
目前我正在做这样的事情:C++ 如何使用指向常量值的常量指针成员正确初始化结构?,c++,pointers,struct,constants,C++,Pointers,Struct,Constants,目前我正在做这样的事情: struct foo { const int *const a, *const b, *const c; foo(int a, int b, int c) : a(_a), b(_b), c(_c) { *_a = a; *_b = b; *_c = c; } private: int _a[1], _b[
struct foo
{
const int
*const a,
*const b,
*const c;
foo(int a, int b, int c)
: a(_a), b(_b), c(_c)
{
*_a = a;
*_b = b;
*_c = c;
}
private:
int _a[1], _b[1], _c[1];
};
但是,有没有一种方法可以做到这一点而不需要输入第二组指针(\u a、\u b、\u c
)
但是有没有一种方法可以在不输入第二组指针(\u a
,\u b
,\u c
)的情况下实现这一点
当然。您可以使用:
foo(int a, int b, int c)
: a(new int(a)), b(new int(b)), c(new int(c)) {}
记住并适当地为foo
实现复制构造函数、复制赋值运算符和析构函数
但是有没有一种方法可以在不输入第二组指针(\u a
,\u b
,\u c
)的情况下实现这一点
当然。您可以使用:
foo(int a, int b, int c)
: a(new int(a)), b(new int(b)), c(new int(c)) {}
请记住并适当地为
foo
实现复制构造函数、复制赋值运算符和析构函数这听起来像是XY问题。你想完成什么?@ JerryCoffin学习C++语言语法…让我重新措辞。你说:“……有没有办法做到这一点而不……”问题是“这”你想做什么?现在,我无法理解您的代码,无法理解代码应该做什么。@JerryCoffin可能有点困惑,因为范围。。。基本上,问题是如何创建指向int的新指针而不声明int*ptr
,这听起来像是XY问题。你想完成什么?@ JerryCoffin学习C++语言语法…让我重新措辞。你说:“……有没有办法做到这一点而不……”问题是“这”你想做什么?现在,我无法理解您的代码,无法理解代码应该做什么。@JerryCoffin可能有点困惑,因为范围。。。基本上,问题是如何创建一个指向int的新指针而不声明int*ptr
这个析构函数可能会更有趣。@Praetorian,我的理解是,他想省去\u a
,\u b
和\u c
@WhozCraig,是的,它会:)是的,这正是delete
在const
指针上工作的原因,请参阅@JosephNields~foo(){删除a,b,c;}
是非常错误的。你只删除了a
,泄露了b
和c
。仔细阅读逗号运算符。当然,异常安全性是不存在的。如果以后的新的抛出,实际上没有办法释放先前分配的内存。用于此的析构函数可能会更有趣。@Praetorian,我的理解是,他想省去\u a
,\u b
和\u c
@WhozCraig,是的,它会:)是的,这正是delete
在const
指针上工作的原因,请参阅@JosephNields~foo(){删除a,b,c;}
是非常错误的。你只删除了a
,泄露了b
和c
。仔细阅读逗号运算符。当然,异常安全性是不存在的。如果以后的new
抛出,实际上无法释放先前分配的内存。