我在C中看到了一些关于实现GC的帖子,有些人说这是不可能的,因为C是弱类型的.我想知道如何在C++中实现GC.
我想要了解如何做到这一点.非常感谢你!
这是我朋友告诉我的彭博采访问题.那时他做得很糟糕.我们想知道您对此的看法.
在C++中如何决定或知道指针是否被删除?
当我试图删除以前在代码的另一部分中删除的指针时,它抛出了无法处理的异常.
我想知道是否有办法检查或尝试删除指针?有关高级内存操作的任何参考.
我也想掌握指针的未处理异常,并且对受保护或访问的访问是违规的,......这种错误.
感谢那些提供一些知识和时间来帮助其他人并分享他们的好处的人
许多现代c ++开发人员社区的重要建议是 - 使用智能指针或尝试避免使用原始指针.但是对于抛出安全性和保证内存不足(ISO_CPP_FAQ),当然如果你想避免使用智能指针的小开销[可能总是不明显但是它们有开销]你可以编写处理原始指针的自定义方法[ type*] - 这不是一般的. 首选智能指针指向原始指针.
在"Going Native 2013"中,给出了一个常见的建议 - 从不使用原始指针.
就像它已经写在这里 Qt到目前为止有8个特定的智能指针类.它看起来就像你需要的一切.但是,为了使用这些智能指针中的任何一个,您的类必须从QObject派生,这并不总是方便的.在Qt中是否有其他智能指针实现可以与任意类一起使用?
让我说我有这个struct:
struct bar
{
};
Run Code Online (Sandbox Code Playgroud)
当我像这样使用auto_ptr:
void foo()
{
auto_ptr<bar> myFirstBar = new bar;
if( )
{
auto_ptr<bar> mySecondBar = myFirstBar;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在auto_ptr<bar> mySecondBar = myFirstBar;C++中将所有权从myFirstBar传输到mySecondBar,并且没有编译错误.
但是当我使用unique_ptr而不是auto_ptr时,我得到编译器错误.为什么C++不允许这样?这两个智能指针之间的主要区别是什么?什么时候需要用什么?
我听说自动指针拥有自己的对象,而共享指针可以有许多指向它们的对象.为什么我们不一直使用共享指针.
与此相关的是智能指针,人们可以将这个术语与共享指针互换使用.它们是一样的吗?
我打算使用函数指针在类中实现不同的函数.但是,在尝试实现一个这样的功能时,我遇到了一些麻烦.
代码在这里:
std::vector<int> * (*create_vector)()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
Run Code Online (Sandbox Code Playgroud)
错误如下:
3: [Error] expected primary-expression before '*' token
3: [Error] 'vec_p' was not declared in this scope
3: [Error] expected '}' before ';' token
4: [Error] expected unqualified-id before 'return'
5: [Error] expected declaration before '}' token
Run Code Online (Sandbox Code Playgroud)
有什么我误解了函数指针,还是一个不同的问题?
这三个是分别来自Qt,STL和Boost的共享指针类.它们的功能似乎相同,所以我很困惑:
目前我正在解决我的问题,boost::shared_ptr但语义不太正确,因为我将成员从一个对象"移植"到另一个对象.我正在查看此列表,但它没有产生太多.我的简短谷歌搜索也是如此.
基本上我正在寻找一个unique_ptr适用于我的gcc4.2的实现(因此限制不使用C++ 11)
您好我正在尝试用C++创建一个遗传算法,我试图使用vector作为容器,问题是我不知道如何设置向量的大小,因为向量有一个像这样的类参数
class population
{
friend class chromosome;
private:
int population_number;
int best_index[2];
vector <chromosome *> chromosome_population;
public:
population(int numberOfPopulation);
population(int numberOfPopulation,int numberOfSynapse);
~population();
int worst_chromosome();
void mating();
void crossover(int parent_1,int parent_2);
};
Run Code Online (Sandbox Code Playgroud)
这是人口类,这里是染色体类
class chromosome
{
friend class population;
private:
int chromosome_id;
float fitness;
vector <gen *> gen_chromosome;
public:
chromosome();
~chromosome();
void fitness_function();
void mutation_translocation();
int get_chromosome_size();
};
Run Code Online (Sandbox Code Playgroud)
如何在population类构造函数中设置向量长度?我试过使用vector.pushback和vector.resize,但两者都会给我错误,因为参数不匹配.实际上我理解为什么它会变成错误但我不知道如何匹配矢量pushback中的参数这里是我的人口构造函数
population::population(int numberOfPopulation)
{
srand (time(NULL));
population_number = numberOfPopulation;
for(int a=0;a<population_number;a++)
{
chromosome_population.push_back();
}
cout<<chromosome_population.size();
for(int i=0;i<population_number;i++)
{
chromosome_population[i]->chromosome_id = i;
int …Run Code Online (Sandbox Code Playgroud) 考虑以下因素:
tbModelHFrame = new TbModelHeaderFrame(this, storage->getDataBase());
Run Code Online (Sandbox Code Playgroud)
我想删除tbModelHFrame内存的正确方法是
delete tbModelHFrame;
Run Code Online (Sandbox Code Playgroud)
对?
如何检查内存是否真正发布?
我正在尝试构建一个依赖于输入参数的类型的对象.例如,我的对象被称为'进程',并且在运行时输入2到5(包括)之间的整数,并且会发生类似这样的事情:
if (input == 2) TwoJ process;
if (input == 3) ThreeJ process;
if (input == 4) FourJ process;
if (input == 5) FiveJ process;
Run Code Online (Sandbox Code Playgroud)
显然上述方法不起作用,因为该对象立即超出范围.有没有办法很好地实现这个?干杯
我在pagePtr.h中有这样的东西
typedef int (*FunPtrType)(char* sz, unsigned int max_bytes, char* arg1,
char* arg2, char* arg3, char* arg4);
Run Code Online (Sandbox Code Playgroud)
以及创建对象的静态函数
static pagePtr* CreatePage( FunPtrType Ptr2Fun)
{
return new pagePtr(ptr2Fun);
}
Run Code Online (Sandbox Code Playgroud)
会提升:: scoped_ptr帮助我不要担心abt删除后来创建的那些.如果是,我应该如何在这种情况下实施.如果可以的话,还有哪些更好的选项可以删除创建的对象.