gpt4 book ai didi

c++ - 测试原始指针 c++,但找不到泄漏

转载 作者:行者123 更新时间:2023-11-28 05:04:52 24 4
gpt4 key购买 nike

<分区>

我正在尝试使用 C++ 上的原始指针,我知道现在使用智能指针是一种很好的做法,但是由于我是自学 C++,所以我想在转向智能指针之前先了解原始指针。

为了玩耍,我创建了一个 fakeClass,并在 Xcode 控制台项目 c++ 中玩耍:

/** fakeClass.hpp **/
#ifndef fakeClass_hpp
#define fakeClass_hpp

namespace RPO {

class fakeClass {
private:
int _id;

public:
fakeClass(int id);
~fakeClass();

void message();
}; // end class
} // end namespace

#endif

/** fakeClass.cpp **/
#include "fakeClass.hpp"

#include <iostream>

namespace RPO {

fakeClass::fakeClass(int id) {
_id = id;
std::cout << "Creating object: " << _id << std::endl;
}

fakeClass::~fakeClass() {
std::cout << "Destroying objet: " << _id << std::endl;
}

void fakeClass::message() {
std::cout << "Object: " << _id << std::endl;
}
}

/** main.cpp **/
int main(int argc, const char * argv[]) {
// Instantiate on the stack
RPO::fakeClass fClass(1);
fClass.message();

// Instantiate on the heap
RPO::fakeClass *fClassPointer = new RPO::fakeClass(2);
fClassPointer->message();

fClassPointer = new RPO::fakeClass(3); // Create new object #3, on non deleted pointer
fClassPointer->message();

delete fClassPointer; // Free memory of object #3, but still pointing to the memory address
fClassPointer = nullptr; // pointer is pointing to null right now

fClassPointer->message(); // throws an error
}

输出:

Creating object: 1
Object: 1
Creating object: 2
Object: 2
Creating object: 3
Object: 3
Destroying object: 3
Destroying object: 1

编辑:

Thanks to the revisors, I have been searching but could not find anything, but the question posted by tobi303 answers one of my questions (about why one method is still responding after free the memory), but as I said on the title the main question was about leaks.

可以看出,对象#2 从未被销毁,因此这是一个明显的内存泄漏。我在创建对象 #3 后设置了断点,并按照 this question 中的说明在控制台上输入“leaks pruebaC”。 ,但我没有收到泄漏报告...为什么?

leaks Report Version:  2.0
Process 1292: 147 nodes malloced for 17 KB
**Process 1292: 0 leaks for 0 total leaked bytes.**

在 de fClassPointer = nullptr; 之后也尝试了同样的结果。

那么,有 2 个问题,为什么泄漏没有出现?并且,当应用程序终止时,应用程序使用的内存是否被释放? (即使是没有指针的内存泄漏)

谢谢。

PS:额外的奖励,当我看到带有“char *myString”的示例时,我应该在之后“删除 myString”吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com