Когда мы вызываем new
для функции конструктора, она всегда возвращает новый объект, что означает, что когда client
был мутирован позже, теперь он определенно содержит новое значение. Это одна вещь.
Другое дело, что сборщик мусора среды выполнения javascript ищет объекты, которые находятся в памяти, но не ссылаются ни на одну из переменных, и, если они найдены, удаляет их.
Так, в основном, когда я делаю это,
let obj = {name: 'Hello'}
obj
ссылается на некоторый объект с 2ABCS
адресом памяти, и когда я изменяю его
let obj = {name: 'World'}
Теперь он ссылается на объект с адресом 1ABCS
, который делает 2ABCS
сиротой, что означает, что он будет удален сборщиком мусора
Подробнее читайте https://javascript.info/garbage-collection
Включайте TestClass.cpp в командную строку, таким образом, компоновщик может найти функциональное определение:
g++ main.cpp TestClass.cpp -o main.app
С другой стороны, скомпилируйте каждого в их собственный объектный файл, затем скажите компилятору соединять их (он передаст их компоновщику),
g++ -c main.cpp -o main.o
g++ -c TestClass.cpp -o TestClass.o
g++ main.o TestClass.o -o main.app
Вы не компилируете и связываетесь против TestClass.cpp
(где реализация foo()
). Компилятор таким образом жалуется что Ваша попытка использовать неопределенную функцию.