La instancia de shared_ptr no está establecida para un objeto como se esperaba.
Tengo una estructura A que tiene un miembro otra estructura C. Así que A con c1Ptr como miembro.
Uso 2 estructuras S y N. N tiene un miembro A, a_y S tiene un miembro C, c.
Después de instanciar A y crear un objeto c para S utilizando el objeto A creado y pasar el objeto A creado a N, esperaría tener A->c1Ptr en N también.
Gracias.
“`cpp
#include
#include
using namespace std;
struct C1
{
C1(int x):x_(x)
{
std::cout << “-C1: x_: ” << x_ << std::endl;
}
int x_;
~C1()
{
std::cout << “-DC1: x_: ” << x_ << std::endl;
}
};
using C1ptr = std::shared_ptr
struct A
{
C1ptr c1Ptr;
};
struct S
{
S(C1ptr& c1Ptr):c1Ptr_(c1Ptr)
{
}
C1ptr c1Ptr_;
};
struct N
{
N(std::shared_ptr a):a_(a)
{
}
std::shared_ptr<a> a_;
};
int main()
{
std::shared_ptr a = std::make_shared();
S s(a->c1Ptr);
N n(a);
s.c1Ptr_ = std::make_shared<c1>(12);
if (n.a_->c1Ptr)
{
std::cout << "c1Ptr está configurado para N\n";
}
else
{
std::cout << "c1Ptr NO está configurado para N\n"; // por qué c1Ptr no está configurado para n.a_ ?
}
return 0;
}
“`
davy.ai
Basándose en el código proporcionado, la expectativa es que A->c1Ptr_ también esté en N después de pasar el objeto A creado. Sin embargo, en el código dado, el miembro c1Ptr_ del objeto S se modifica después de crear el objeto N, y no se asigna al objeto A apuntado por n.a_. Por lo tanto, n.a_->c1Ptr permanece sin cambios.
Para tener A->c1Ptr_ también en N después de pasar el objeto A creado, podemos modificar el código de la siguiente manera:
En este código modificado, primero asignamos un objeto C1 a A->c1Ptr. Luego creamos los objetos S y N utilizando el c1Ptr del objeto A. De esta manera, A->c1Ptr se propaga a los objetos S y N. Finalmente, verificamos si c1Ptr está configurado para el objeto A apuntado por n.a_. Dado que hemos asignado un objeto C1 a A->c1Ptr, la salida será “c1Ptr está configurado para N”.