Я буду второй valgrind как внешний инструмент для утечек памяти.
, Но, для большинства проблем, которые я должен был решить, я всегда использовал внутренне созданные инструменты. Иногда внешние инструменты имеют слишком много служебное или являются слишком сложными для установки.
, Почему использование уже записанный код, когда можно записать собственное:)
я шучу, но иногда Вам нужно что-то простое, и это быстрее для записи его самим. Обычно я просто заменяю вызовы к malloc () и свободный () с функциями, которые отслеживают то, кто выделяет что. Большинство моих проблем, кажется, кто-то, забыл освобождать, и это помогает решить ту проблему.
Это действительно зависит от того, где утечка, и если бы Вы знали, что, тогда Вам не были бы нужны никакие инструменты. Но если у Вас есть некоторое понимание, где Вы думаете, что оно пропускает, затем вставило Ваш собственный инструментарий и видит, помогает ли оно Вам.
Short Answer: In Languages C++, Java: No. In Languages like Python: Yes
Класс похож на чертеж, объект похож на дом, построенный по этому чертежу.
У вас может быть много домов с одинаковой планировкой / планом этажа (читайте класс), но каждый из них это собственный экземпляр (объект чтения). У каждого есть собственный владелец, мебель и т. Д.
Обратите внимание, что есть также объекты, план которых не является классом (например, целые числа).
В C ++ объекты по сути являются переменными, а классы - типами их значений.
Это аналогично тому, как спросить, является ли кошка «Варежками моего котенка».
И классы, и экземпляры являются объектами, но объектно-ориентированное программирование не заставляет язык иметь классы и экземпляры.
C ++ поддерживает множество парадигм, но не стиль объектно-ориентированного программирования «все является объектом». Классы существуют в исходном коде, но не существуют во время выполнения. Даже информация о типе времени выполнения не сохраняет классы как объекты, а только предоставляет возможность получать непрозрачные идентификаторы, соответствующие типу.
Объект - это некоторые данные, которые имеют адрес в оперативной памяти.
Существуют разные типы объектов (например, int, float и т. Д.). Вы можете создавать определяемые пользователем типы, называемые «классами».
Например, я могу определить Dog как класс ...
class Dog {};
... а затем создать несколько объектов, каждый из которых является одним экземпляром этого класса ...
Dog fido;
Dog spot;
Я постараюсь дать больше технических объяснений, чем абстрактных. Я думаю, что такие определения, как «класс - это план, а объект - это что-то созданное из этого плана» их невозможно понять новичкам просто потому, что такие определения абстрактны и не зависят от контекста.
Классы и объекты имеют чисто абстрактное значение в объектно-ориентированном мире, но для простоты я уменьшу определение до более практичного.
1297] Рассмотрим следующий оператор:
int a;
«int» - это тип , а «a» - это переменная, имеющая тип «int».
C ++ предоставляет различные способы, позволяющие программисту определять новые типы; например:
typedef int* int_ptr;
int_ptr a;
В этом примере определен новый тип int_ptr. - это переменная типа int.
C ++ предоставляет различные способы, позволяющие программисту определять новые типы; например:
typedef int* int_ptr;
int_ptr a;
В этом примере определен новый тип int_ptr. - это переменная типа int.
C ++ предоставляет различные способы, позволяющие программисту определять новые типы; например:
typedef int* int_ptr;
int_ptr a;
В этом примере определен новый тип int_ptr. "int_ptr" - это тип, "a" - это переменная, имеющая тип "int_ptr". Другой пример:
struct Point
{
int x;
int y;
};
Point a;
Здесь определен новый тип , «Point», а «a» - это переменная, имеющая тип «Point».
Итак, что такое класс в C ++? Класс - это еще один способ определения нового типа, как и другие способы, упомянутые выше.
Что такое объект? Объект - это переменная, тип которой был определен с помощью ключевого слова class.
Например:
class SmartPoint
{
public:
Point(x,y);
Move(x,y);
protected:
int x,y ;
};
SmartPoint a;
В этом примере определен новый тип , «SmartPoint» и «a» - это переменная, имеющая тип "SmartPoint".
Тогда вы можете спросить, чем отличается тип, определенный с помощью ключевого слова "class", ключевого слова "struct" или "typedef" - но это вопрос другого обсуждения .
Класс : класс определяет поведение и свойства конкретного типа.
Объект : объект является экземпляром класса.
Например, если вы иметь Собаку по имени Бинго .
Собака будет классом , определяющим ее поведение и свойства
Бинго будет объект , который является экземпляром класса Dog
Строго говоря, класс не является объектом в C ++. Но в таких языках, как C # и Java, которые поддерживают отражение, классы могут использоваться как объекты, но это более продвинутая тема и, вероятно, не то, что задает исходный вопрос.
Нет, объект является экземпляром класса ...
Если ...
Если вы реализуете инструмент разработки программного обеспечения, который позволяет вам представлять классы, интерфейсы, свойства, наследование, ассоциации, агрегации и т. д., то во время выполнения да, каждый класс, который вы помещаете в конструктор, будет экземпляром объекта класса Class. Ладно, я не мог удержаться от того, чтобы найти пример такой извращенный и мета.
А теперь серьезно, класс - это не объект.
Класс не является объектом.
В более простом языке C класс похож на тип struct
, но более сложен.
Используя пример C struct
в качестве аналогии:
struct class_ {
int attribute00;
float attribute02;
...
}
struct class_ object_ = {0, 0.0, ...};
struct class_
действует как класс
, а object_
действует как объект
.
struct class_
не имеет физического хранилища в памяти, object_
имеет физическое хранилище в памяти.
В человеческом языке слово «дом» (как класс
) может быть определено в словаре как место для проживания, с дверями, окнами и комнатами, в которых вы можете говорить только своим ртом. рассказывать другим людям, что такое дом. Физический дом (как объект
) - это прочный дом на земле, в который вы можете въехать и остаться со своей семьей.
Слово «дом» не подразумевает физического занятия земли или пространства. Физический дом занимает землю и пространство.