我有一个类使用一些回调来进行计算.那些回调需要分配需要在回调范围之外生存的数据(动态数组),而不是在类破坏之后.我想过当一个类破坏时vector,auto_ptr它会自动被破坏:
class MyClass
{
vector<auto_ptr<MyObject>> ThingsToDie;
};
Run Code Online (Sandbox Code Playgroud)
问题是我分配了很多对象,并且它们不共享基类型,所以我不能使用vector它,并为每种类型制作一个向量是很多工作.
如下所示的层次结构:
auto_ptr_base (virtual destructor)
|
auto_ptr<T>
Run Code Online (Sandbox Code Playgroud)
将解决我的问题,因为我可以做类似的事情
class MyClass
{
vector<auto_ptr_base> ThingsToDie;
};
Run Code Online (Sandbox Code Playgroud)
并且将自动将销毁实际分派给每个专用类型.
问题是STL没有那个层次结构,我不想重新实现auto_ptr.
还有其他解决方案吗?
请考虑以下声明:
Object *a;
Object *b;
Run Code Online (Sandbox Code Playgroud)
有两种分配a方式b,按价值或通过参考分配:
a = b; // by reference
*a = *b; // by value
Run Code Online (Sandbox Code Playgroud)
如果声明是:
Object &a;
Object &b;
Run Code Online (Sandbox Code Playgroud)
(我知道如果不初始化它们就不可能声明它们,它只是为了显示类型)
有两种方式分配的a到b过,就像指针,通过引用或值.
这个代码中的哪一个:
a = b;
Run Code Online (Sandbox Code Playgroud)
会怎么做?有可能让它做相反的吗?(使用不同的语法?)
@propert(保留)做什么?它实际上并没有通过我的测试保留我的对象:
id obj = getObjectSomehow();
NSLog(@"%d", [obj retainCount]);
propertyWithRetain = obj;
NSLog(@"%d", [obj retainCount]);
// output:
// 1
// 1
Run Code Online (Sandbox Code Playgroud)
如何创建一个真正保留对象的属性?
为什么gcc给出返回13作为下一课的sizeof?在我看来,我们应该得到e(4字节)+ d(4字节)+ 1字节(对于a和b)= 9字节.如果它是对齐的,那么大多数32位系统是不是在8字节边界上对齐的?
class A {
unsigned char a:1;
unsigned char b:4;
unsigned int d;
A* e;
} __attribute__((__packed__));
int main( int argc, char *argv[] )
{
cout << sizeof(A) << endl;
}
Run Code Online (Sandbox Code Playgroud)
./a.out 13