gpt4 book ai didi

c++ - 如何使 const 应用于作为共享指针的 C++ 类成员

转载 作者:行者123 更新时间:2023-11-30 01:17:06 25 4
gpt4 key购买 nike

我正在努力尝试找出如何使用共享指针将 const 指针传递给类。通常你只是声明一个指向对象的指针 const 并且你不能再更改其中的任何成员,但是如果类使用共享指针 const 似乎不适用.

这是一个可编译的问题示例。在 processA() 中,应该不可能向 vector 添加另一个元素,因为该对象应该是 const

我做错了什么?

#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>

struct C {
int value;
};

struct B {
std::vector<C> vectorOfC;
};

struct A {
boost::shared_ptr<B> b;
};

typedef boost::shared_ptr<A> PtrA;

void processA(boost::shared_ptr<const A> a)
{
// This should not be possible because 'a' points to const
C c2;
c2.value = 456;
a->b->vectorOfC.push_back(c2);

for (std::vector<C>::const_iterator
i = a->b->vectorOfC.begin(); i != a->b->vectorOfC.end(); i++
) {
std::cout << i->value << std::endl;
}
}

int main(void)
{
C c;
c.value = 123;

PtrA a(new A);
a->b.reset(new B);
a->b->vectorOfC.push_back(c);

processA(a);
return 0;
}

最佳答案

所有关于 shared_ptr 的东西都只是转移注意力。

您有一个指向 const 对象的指针,该对象有一个指向非 const 对象的指针。

您当然可以修改后一个对象。

关于c++ - 如何使 const 应用于作为共享指针的 C++ 类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com