void LOG( char* ptr) { std::cout << ptr << std::endl; }怎么调用
时间: 2024-05-06 19:18:36 浏览: 44
可以通过传入一个字符数组或者字符串常量来调用这个函数。例如:
```
char msg[] = "Hello, world!";
LOG(msg); // 调用 LOG 函数并传入字符数组 msg
LOG("Hello, world!"); // 直接传入字符串常量调用 LOG 函数
```
注意,由于函数声明中的参数类型为 `char*`,即字符指针,因此在函数实现中,可以使用字符指针或者字符数组来接收传入的参数。在这个例子中,使用了字符指针 `ptr` 来接收传入的参数。
相关问题
std::cout << *ptr << std::endl;和std::cout << ptr << std::endl;有什么区别
`std::cout << *ptr << std::endl;` 输出的是指针 `ptr` 所指向的地址上存放的值,也就是指针所指向的变量的值。
而 `std::cout << ptr << std::endl;` 输出的是指针本身的值,也就是指针变量所存储的地址值。这个地址值可以通过解引用操作符 `*` 来访问指针所指向的变量的值。
举个例子,假设有如下代码:
```
int a = 42;
int* ptr = &a;
std::cout << *ptr << std::endl; // 输出 42
std::cout << ptr << std::endl; // 输出 ptr 的地址值
```
第一行输出的是 `ptr` 所指向的变量 `a` 的值,即 `42`;第二行输出的是 `ptr` 的地址值,即指针变量本身存放的地址。
#include <iostream> #include <cstdlib> class MyClass { public: void* operator new(std::size_t size) { std::cout << "Custom new operator called, size = " << size << std::endl; return std::malloc(size); } void operator delete(void* ptr) noexcept { std::cout << "Custom delete operator called" << std::endl; std::free(ptr); } void* operator new[](std::size_t size) { std::cout << "Custom new[] operator called, size = " << size << std::endl; return std::malloc(size); } void operator delete[](void* ptr) noexcept { std::cout << "Custom delete[] operator called" << std::endl; std::free(ptr); } // 构造函数和析构函数略 }; int main() { MyClass* p = new MyClass(); delete p; MyClass* arr = new MyClass[10]; delete[] arr; return 0; } 在这段代码中如何给delete加打印文件名称的功能
要在 delete 中添加打印文件名称的功能,可以使用宏定义的方式,在 delete 操作时调用自定义的 delete 函数。具体实现如下:
```
#include <iostream>
#include <cstdlib>
#define DELETE_WITH_INFO(ptr) CustomDelete(ptr, __FILE__, __LINE__)
void CustomDelete(void* ptr, const char* file, int line) noexcept {
std::cout << "Custom delete operator called from " << file << " line " << line << std::endl;
std::free(ptr);
}
class MyClass {
public:
void* operator new(std::size_t size) {
std::cout << "Custom new operator called, size = " << size << std::endl;
return std::malloc(size);
}
void operator delete(void* ptr) noexcept {
DELETE_WITH_INFO(ptr);
}
void* operator new[](std::size_t size) {
std::cout << "Custom new[] operator called, size = " << size << std::endl;
return std::malloc(size);
}
void operator delete[](void* ptr) noexcept {
DELETE_WITH_INFO(ptr);
}
// 构造函数和析构函数略
};
int main() {
MyClass* p = new MyClass();
DELETE_WITH_INFO(p);
MyClass* arr = new MyClass[10];
DELETE_WITH_INFO(arr);
return 0;
}
```
在 delete 操作时使用 DELETE_WITH_INFO 宏代替 delete 操作即可。该宏会调用 CustomDelete 函数,该函数会打印文件名称和行号,并调用 std::free() 函数释放内存。
阅读全文