How to destroy two cloned cards when matched in memory card game?

using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class SceneController_animal : MonoBehaviour
{
public GameObject teacher;

public const int gridRows = 2;
public const int gridCols = 4;
public const float offsetX = 4f;
public const float offsetY = 4.8f;

[SerializeField]
private MainCard_animal originalCard;

[SerializeField]
private Sprite[] images;

private void Start()
{
    Vector3 startPos = originalCard.transform.position; //The position of the first card. All other cards are offset from here.
    int[] numbers = { 0, 0, 1, 1, 2, 2, 3, 3 };
    numbers = ShuffleArray(numbers);

    for(int i = 0; i < gridCols; i++)
    {
        for(int j = 0; j < gridRows; j++)
        {
            MainCard_animal card;
            if (i == 0 && j == 0)
            {
                card = originalCard;

            }
            else
            {

                card = Instantiate(originalCard) as MainCard_animal;

            }

            int index = j * gridCols + i;
            int id = numbers[index];
            card.ChangeSprite(id, images[id]);

            float posX = (offsetX * i) + startPos.x;
            float posY = (offsetY * j) + startPos.y;

            card.transform.position = new Vector3(posX, posY, startPos.z);

        }

    }

}

private int[] ShuffleArray(int[] numbers)
{
    int[] newArray = numbers.Clone() as int[];
    for(int i = 0; i < newArray.Length; i++)
    {
        int tmp = newArray*;*

int r = Random.Range(i, newArray.Length);
newArray = newArray[r];
newArray[r] = tmp;
}
return newArray;
}
private MainCard_animal _firstRevealed;
private MainCard_animal _secondRevealed;
private int _score = 0;
[SerializeField] private TextMesh scoreLabel;

public bool canReveal
{
get { return _secondRevealed == null; }
}
public void CardRevealed(MainCard_animal card)
{
if(_firstRevealed == null)
{
_firstRevealed = card;
}
else
{
_secondRevealed = card;
StartCoroutine(CheckMatch());
}
}
private IEnumerator CheckMatch()
{
if(_firstRevealed.id == _secondRevealed.id)
{
_score++;
scoreLabel.text = "Score: " + _score;
Destroy(_firstRevealed);
Destroy(_secondRevealed);
}
else
{
yield return new WaitForSeconds(0.5f);
_firstRevealed.Unreveal();
_secondRevealed.Unreveal();
}
_firstRevealed = null;
_secondRevealed = null;
if (_score == 4)
{
}
}
}

Maincard_animal is just a reference to the script, not the object/prefab itself.

You can use:

GameObject card = Instantiate(originalCard.gameObject) as GameObject;

If the objects are instantiating as GameObjects already, you may just need to use

Destroy(_firstRevealed.gameObject);