相关疑难解决方法(0)

如何知道指针是指向堆还是堆栈?

例:

bool isHeapPtr(void* ptr)
{
     //...
}

int iStack = 35;
int *ptrStack = &iStack;
bool isHeapPointer1 = isHeapPtr(ptrStack); // Should be false
bool isHeapPointer2 = isHeapPtr(new int(5)); // Should be true
/* I know... it is a memory leak */
Run Code Online (Sandbox Code Playgroud)

为什么,我想知道这个:

如果我在一个类中有一个成员指针,我不知道指向对象是否是新分配的.然后我应该使用这样的实用程序来知道我是否需要delete指针.

但是:
我的设计尚未完成.所以,我会按照我一直以来的方式编程delete.我要避免垃圾编程

c++ pointers memory-management

27
推荐指数
6
解决办法
9602
查看次数

我可以确定参数是否是字符串文字?

是否可以确定在宏或函数中传递的参数在编译时或运行时是否是字符串文字?

例如,

#define is_string_literal(X)
...
...   

is_string_literal("hello") == true;
const char * p = "hello";
is_string_literal(p) == false;
Run Code Online (Sandbox Code Playgroud)

要么

bool is_string_literal(const char * s);

is_string_literal("hello") == true;
const char * p = "hello";
is_string_literal(p) == false;
Run Code Online (Sandbox Code Playgroud)

谢谢.

c c++

18
推荐指数
4
解决办法
7550
查看次数

字符串文字引用类

C++1y,我可以绑定到一个字符串而不是引用类char*char[]&或类似的?

class LitRf{
  const char* data_;
  size_t size_;
public:
  LitRf(const char* /*?*/ s) : data_{s},size_{sizeof(s)} { /*?*/ }
};
Run Code Online (Sandbox Code Playgroud)

c++ c++14

7
推荐指数
1
解决办法
174
查看次数

将传递的参数限制为字符串文字

我有一个类来包装字符串文字并在编译时计算大小.

构造函数如下所示:

template< std::size_t N >
Literal( const char (&literal)[N] );

// used like this
Literal greet( "Hello World!" );
printf( "%s, length: %d", greet.c_str(), greet.size() );
Run Code Online (Sandbox Code Playgroud)

但是代码有问题.下面的代码编译,我想使它成为一个错误.

char broke[] = { 'a', 'b', 'c' };
Literal l( broke );
Run Code Online (Sandbox Code Playgroud)

有没有办法限制构造函数,使它只接受c字符串文字?编译时间检测是首选,但如果没有更好的方法,则可以接受运行时.

c++ string-literals c++11

5
推荐指数
2
解决办法
2342
查看次数

标签 统计

c++ ×4

c ×1

c++11 ×1

c++14 ×1

memory-management ×1

pointers ×1

string-literals ×1