我正在实现一个多态类型(称之为A),我想通过std::shared_ptr专门管理它。为了允许在派生类的构造函数中使用shared_from_this,A使用new分配,然后初始化一个成员std::shared_ptr给自己自动管理它的生命周期。为了帮助实现这一点,我决定将类特定的operatornew设为私有(private),并计划使用create()辅助函数而不是new和make_shared。该设计可能看起来有点滑稽,但在我正在处理的UI库的上下文中是有意义的。一个最小的可重现示例如下:structA{A():m_sharedthis(this){}voiddestroy(){
我想访问类中的私有(private)数据成员。类中没有访问私有(private)数据成员的成员函数。这是私有(private)的。我想上课,想知道如何打开它。一种方法是复制类的声明,将私有(private)成员设为公有并将新类称为something_else。然后我重新解释转换并复制原始对象。这行得通。但我想要更优雅的东西……或者可能是通用的……或者只是另一种方式。有哪些选择?我可以使用void*吗?我可以将类(class)memcpy到另一个空类(class)吗?有什么方法可以做到这一点?% 最佳答案 我假设您已经经历了“打破封装
这合法吗?如果不允许,以下代码是否允许这样做?classFoo{friendclassFoo;} 最佳答案 那是多余的。Foo已经可以访问所有Foo成员。两个Foo对象可以访问彼此的成员。classFoo{public:inttouchOtherParts(constFoo&foo){returnfoo.privateparts;}private:intprivateparts;};Fooa,b;b.touchOtherParts(a);上面的代码可以正常工作。B将访问A的私有(private)数据成员。
我不完全明白这一点:classBase{public:Base(){cout是否因为有人可能使用bPtr调用call()而这实际上是在派生对象上完成的?还是有其他原因? 最佳答案 公有继承就是大家都知道Derived是从Base派生出来的。protected继承意味着只有Derived、Derived的friend以及从Derived派生的类知道Derived是从Base派生的。*私有(private)继承是指只有Derived和Derived的friend知道Derived是从Base派生的。由于您使用了私有(private)继承
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion通过将类的私有(private)成员转换为空指针然后再转换为结构来访问类的私有(private)成员是否合适?我认为我无权修改包含我需要访问的数据成员的类。如果不符合道德规范,我不想冒险以间接方式访问数据成员。编辑:不得不进一步编辑这个...我很确定这个类不会被修改,所以在那个程度上没关系...我唯一担心的是,如果编写该类的人知道这个,他可能不太满意:(。
我在VisualStudio2013和2017中发现std::unique_ptr的行为非常奇怪。让我们考虑一个例子:classBase{public:virtual~Base()=default;virtualvoidFoo()=0;};classDerived:privateBase{public:voidFoo()override{std::couta){a->Foo();}Foo(std::unique_ptr(newDerived()));//Compiles请注意,继承是私有(private)的。此示例仅在VisualStudio上编译。而且,虚函数调用是有效的,因为它是公
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whycaniaccessaderivedprivatememberfunctionviaabaseclasspointertoaderivedobject?#includeusingnamespacestd;classB{public:virtualvoidfn1(void){coutfn1();p->fn2();}为什么p->fn2()调用派生类函数,即使fn2在D中是私有(private)的?
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Cannotaccessprivatememberinsingletonclassdestructor我正在实现一个单例,如下所示。classA{public:staticA&instance();private:A(void){cout析构函数是私有(private)的。当程序即将终止时,是否会为对象theMainInstance调用它?我在VisualStudio6中试过,它给出了编译错误。"cannotaccessprivatememberdeclaredinclass..."在visualstudio
我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/
我正在用C++编写一个库。我的图书馆有两个类(class),A和B.我想隐藏A()引用我的库的任何代码的构造函数。我也要上课B能够调用A()构造函数。我有C#背景,对我的C++内存犹新。在C#中,我将简单地声明A()构造函数为internal.我读过在C++中执行此操作的最接近方法是friend的组合声明和前向声明。我该怎么做呢?下面是我的三个文件:嗯:#pragmaonceclassA{private:A();};B.h#pragmaonceclassA;classB{public:AcreateA();};B.cpp:#include"A.h"#include"B.h"AB::cr