у меня есть Teuchos::RCP<Epetra_MultiVector> X
сделан только из 1 столбца,
и я хочу преобразовать этот вектор в простой Epetra_Vector.
Я использовал следующие функции:
const Teuchos::RCP<Epetra_Vector> x_rcp =
Teuchos::rcpWithEmbeddedObj( (*X)(1), X, false );
Epetra_Vector* x = x_rcp.getRawPtr();
Я могу скомпилировать эти функции, но когда я пытаюсь распечатать оба
x_rcp
а также x
Я не получаю никакого результата (файлы не пишутся), код останавливается
с ошибкой:
прекращение вызывается после создания экземпляра int.
Что я делаю неправильно?
Если все, что вы хотите сделать, это конвертировать между Teuchos::RCP
для Epetra_MultiVector
и Epetra_Vector
Вам не нужно использовать какие-либо дополнительные указатели подсчета ссылок Teuchos. Вы можете получить доступ к Epetra_Vector
из Epetra_MultiVector
непосредственно используя () оператор из Epetra_MultiVector
, что вы сделали в своем коде. Вы можете сделать следующее:
Epetra_Vector* x = new Epetra_Vector(*((*X)(0)));
(это предполагает, что вы используете нулевое индексирование; ваша ошибка может частично заключаться в том, что вы обратились к (* X) (1) вместо (* X) (0))
Вы уже используете (* X) (1), чтобы получить Epetra_Vector
указатель; все, что я сделал здесь, разыменовано, чтобы получить Epetra_Vector
объект, и сделал копию, используя Epetra_Vector
Копировать конструктор.
это Epetra_Vector
будет зависеть от оригинала Epetra_MultiVector
,
Если вы хотите, вы также можете создать Teuchos::RCP
объект, используя этот указатель, а затем взять необработанный указатель из этого. Это обычно не рекомендуется в Teuchos::RCP
документация, которая гласит:
ВНИМАНИЕ :: Избегайте разоблачения сырых указателей C ++!